用Nohup命令让Linux下的程序真正在后台执行(转载)

2023-05-16

Unix/Linux下一般想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台:

/usr/local/mysql/bin/mysqld_safe –user=mysql &

  但是我们很多程序并不象mysqld一样可以做成守护进程,可能我们的程序只是普通程序而已,一般这种程序即使使用 & 结尾,如果终端关闭,那么程序也会被关闭。为了能够后台运行,我们需要使用nohup这个命令,比如我们有个start.sh需要在后台运行,并且希望在后台能够一直运行,那么就使用nohup

nohup /root/start.sh &

shell中回车后提示:

[~]$ appending output to nohup.out

原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。

但是有时候在这一步会有问题,当把终端关闭后,进程会自动被关闭,查看nohup.out

以看到在关闭终端瞬间服务自动关闭。

  咨询红旗Linux工程师后,他也不得其解,在我的终端上执行后,他启动的进程竟然在关闭终端后依然运行。在第二遍给我演示时,我才发现我和他操作终端时的一个细节不同:他是在当shell中提示了nohup成功后还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端;而我是每次在nohup执行成功后直接点关闭程序按钮关闭终端.。所以这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown。这个细节有人和我一样没注意到,所以在这儿记录一下了。

附:nohup命令参考

nohup 命令

用途:不挂断地运行命令。

语法:nohup Command [ Arg … ] [& ]

描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示”and”的符号)到命令的尾部。

无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

退出状态:该命令返回下列出口值:

126 可以查找但不能调用 Command 参数指定的命令。

127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。

否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

nohup命令及其输出文件

nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)

该命令的一般形式为:nohup command &

使用nohup命令提交作业

如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:

nohup command > myout.file 2>&1 &

在上面的例子中,输出被重定向到myout.file文件中。

使用 jobs 查看任务。

使用 fg %jobnumber 是将任务拿到前台执行,拿到前台后如果要关闭这个任务按Ctrl+c组合键即可,但如果要暂停这个任务可以按Ctrl+z组合键这时就会将任务置于暂停状态。

[root@wangdm ~ 22:51 #81]# jobs
[2]+  Stopped                 dd if=/dev/zero of=/dev/null bs=8k count=100000000
[3]-  Stopped                 dd if=/dev/zero of=/dev/null bs=8k count=100000000

如果想要暂停的任务继续在后执行可以使用 bg %jobnumber这样暂停后的任务继续在后台运行状态会变为running

有人可能注意到了我上面的两个任务编号2和3的后面分别跟了个'+'和'-',这个'+'代表什么意思呢?这个'+'就是表示在当前窗口下后台默认调用的任务,听起来有点别扭下做一个实验:

上面我们看到的两个任务都是处于停止状态是吧,正常情况下让任务继续后台运行是bg %jobnumber命令吧我现在做如下操作,我直接输入bg任务2就被激活了,也就是说在此窗口下后台默认将带'+'的任务2激活了,现在是3变成带'+'了可以重复操作,现在应该理解了吧;fg跟这个是一样的情况有兴趣的朋友可以去试试

[root@wangdm ~ 23:09 #86]# bg
[2]+ dd if=/dev/zero of=/dev/null bs=8k count=100000000 &
[root@wangdm ~ 23:09 #87]# jobs
[2]-  Running                 dd if=/dev/zero of=/dev/null bs=8k count=100000000 &
[3]+  Stopped                 dd if=/dev/zero of=/dev/null bs=8k count=100000000
[root@wangdm ~ 23:09 #88]# bg
[3]+ dd if=/dev/zero of=/dev/null bs=8k count=100000000 &
[root@wangdm ~ 23:11 #89]# jobs
[2]-  Running                 dd if=/dev/zero of=/dev/null bs=8k count=100000000 &
[3]+  Running                 dd if=/dev/zero of=/dev/null bs=8k count=100000000 &



另外有两个常用的ftp工具ncftpgetncftpput,可以实现后台的ftp上传和下载,这样就可以利用这些命令在后台上传和下载文件了。

此文基本是转载,以前一直以为加上&就是真正的后台执行了,前段时间就是本着这种理解去操作了一个大事务关掉终端后第二天早上来看以为事务应该执行完了发现原来终端什么时候关掉事务也就是什么时候结束的,因此从网上查找资料发现有位仁兄找到了这个命令就转载同共一下哈。。。。。。。


转载于:https://blog.51cto.com/gxjluck/1339939

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用Nohup命令让Linux下的程序真正在后台执行(转载) 的相关文章

随机推荐

  • AutoCAD2016简体中文破解版32位64位下载

    AutoCAD2016序列号 xff1a 666 69696969 667 98989898 400 45454545 066 66666666 任意一个 AutoCAD2016产品密钥 xff1a 001H1 AutoCAD2016软件3
  • 树莓派进阶之路 (031) -字符问题(1) - GBK汉字编码表(转)

    转载 xff1a http blog sina com cn s blog 8184e033010109ug html 基本简介 GB码 xff0c 全称是GB2312 80 信息交换用汉字编码字符集基本集 xff0c 1980年发布 xf
  • 外贸盒子x96max+ 搭建Armbian系统 (附国内可用的img镜像下载地址)

    记录一下在x96max 43 外贸盒子上面搭建Armbian的历程 Armbian是什么操作过程 救砖历程 xff1a 国内外相关电视盒子论坛 Armbian是什么 Armbian是轻量级的Debian系统 xff0c 为ARM开发板专门发
  • 手机上输入http://192.168.1.102:8888/FiddlerRoot.cer为什么下载不了证书

    因为之前你的手机可能已经安装了该证书 xff0c 所以再次下载会说找不到证书 解决办法 如果你遇到上面的问题 就可能是证书的问题 我的本地证书是用系统生成证书的一个软件生成的个人证书 所以出现了问题 操作步骤如下 1 将之前的证书删除打开系
  • 区块链上编程:DApp 开发实战——来写个竞猜游戏吧!

    本文旨在引导对 DApp 开发感兴趣的开发者 xff0c 构建一个基于以太坊去中心化应用 xff0c 通过开发一款功能完备的竞猜游戏 xff0c 迈出 DApp 开发的第一步 xff0c 通过实例讲解 Solidity 语言的常用语法 xf
  • pip更改下载源设置

    任何一个信息都可以把人分为两类 xff0c 知道的和不知道的 有些我们已知的信息 xff0c 自己觉得很平常 xff0c 却可能对另一些不知道的人来说很有用处 比如今天要说的这个小技巧 xff0c 我自己原以为不值一提 xff0c 网上也很
  • 让div在屏幕中居中(水平居中+垂直居中)的几种方法

    水平居中方法 1 inline xff0c inline block元素的水平居中 xff0c 在父级块级元素中设置text align center 2 确定宽度的块级元素水平居中方法 margin xff1a 0 auto xff1b
  • 从ELK到EFK

    背景 作为中国最大的在线教育站点 xff0c 目前沪江日志服务的用户包含沪江网校 xff0c 交易 xff0c 金融 xff0c CCtalk xff08 直播平台 xff09 等多个部门的多个产品的日志搜索分析业务 xff0c 每日产生的
  • 证明:实对称矩阵中,属于不同特征值的特征向量相互正交

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 证明 xff1a 实对称矩阵中 xff0c 属于不同特征值的特征向量相互正交 设AP 61 1P xff0c AP 61 2P xff0c 其中A为实对称矩阵 xff0c
  • 宝塔面板一键docker部署

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 推荐 xff1a 宝塔面板一键docker部署 0 购买服务器 1 安装docker root 64 VM 0 2 centos curl fsSL https get d
  • 异步I/O Asynchronous I/O

    原帖地址 xff1a http www ibm com developerworks cn linux l async AIO 简介 Linux 异步 I O 是 Linux 内核中提供的一个相当新的增强 它是 2 6 版本内核的一个标准特
  • Trapping Rain Water II

    Given n x m non negative integers representing an elevation map 2d where the area of each cell is 1 x 1 compute how much
  • QT- label实现滚动字幕 (跑马灯)效果 -像素级

    QT label滚动字幕 原理代码完整源码 43 部件提升 想通过QSS实现更多效果的请搜索QT自带帮助文档 Qt Style Sheets Examples xff0c 使用样式表来定制程序界面 原理 让label字母滚动起来的原理很简单
  • matlab练习程序(TV模型图像修复)

    曾经想要实现过Bertalmio图像修复算法 xff0c 无奈自身实力不够 xff0c 耗费两天时间也没能实现 昨天博客上有人问到TV模型 xff0c 这个模型我过去是没听说过的 xff0c 于是就找来相关论文研究了一下 xff0c 发现T
  • M4——GPIO配置

    1 GPIO 简述 通用输入输出 General Purpose Input Output 的简称 xff0c 就是芯片引脚可以通过他们输出高电平或者低电平 xff0c 也可以通过他们读取引脚的电平状态 以STM32F407ZGT6芯片为例
  • linux 查看服务器序列号(S/N)

    root 64 node1 dmidecode t 查看支持的参数 dmidecode option requires an argument 39 t 39 Type number or keyword expected Valid ty
  • Apache 中文显示乱码的问题

    用Apache 2 2发布一个html网页 xff0c 访问时发现网页中的中文全部显示乱码 之前在IIS上发布显示很正常 xff0c 网页本身编码应该是没问题的 查看源代码确定html文档编码为GB2312 在 etc httpd conf
  • 对centos进行一些个性化设置(如alias等)

    为什么80 的码农都做不了架构师 xff1f gt gt gt 一 xff1a linux xff08 centos5 10 xff09 中alias的设置 amp 常用 查询 xff1a 查看当前系统的所有alias shell gt a
  • Linux编程之有限状态机FSM的理解与实现

    有限状态机 xff08 finite state machine xff09 简称FSM xff0c 表示有限个状态及在这些状态之间的转移和动作等行为的数学模型 xff0c 在计算机领域有着广泛的应用 FSM是一种逻辑单元内部的一种高效编程
  • 用Nohup命令让Linux下的程序真正在后台执行(转载)

    Unix Linux 下一般想让某个程序在后台运行 xff0c 很多都是使用 amp 在程序结尾来让程序自动运行 比如我们要运行 mysql 在后台 xff1a usr local mysql bin mysqld safe user 61