后台执行进程的方法

后台进程:

我们每次在终端窗口执行命令的时候,进程总会一直占用着终端,走到进程结束,这段时间内,我们在终端的输入是没有用的。而且,当终端窗口关闭或网络连接失败后,再次打开终端,会发现进程已经中断了。这是因为用户注销或者网络断开时,SIGHUP信号会被发送到会话所属的子进程,而此 SIGHUP 的默认处理方式是终止收到该信号的进程。所以若程序中没有捕捉该信号,当终端关闭后,会话所属进程就会退出。

我们要实现后台执行的目的,实际上是要完成如下两个目标:

  • 使进程让出前台终端,让我们可以继续通过终端与系统进行交互。
  • 使进程不再受终端关闭的影响,即系统在终端关闭后不再向进程发送 SIGHUP 信号或即使发送了信号程序也不会退出。

以下的命令就围绕着这两个目标来实现。

&

首先是我们最经常遇到的符号 &,将它附在命令后面可以使进程在后台执行,不会占用前台界面。它实际上是在会话中开启了一个后台作业,对作业的操作我们后面再说。

但我们会发现,如果此时终端被关闭后,进程还是会退出。这是因为,& 符号只有让进程让出前台终端的功能,无法让进程不受 SIGHUP 信号的影响。

nohup

nohup 应该是另外一个我们常用的命令了,它的作用如其字面意思,使进程不受 SIGHUP 信号的影响。但我们在使用 nohup php test.php 后会发现,进程还会一直占用前台终端,但即使终端被关闭或连接断开了,程序还是会执行,另外我们会发现在当前文件夹下多了个名为 nohup.out 的文件。

这是因为 nohup 的功能仅仅是让进程不受 SIGHUP 信号的影响,并不会让出前台终端,而且它还会在命令执行目录下建立 nohup.out 用以存储进程的输出。如果进程不需要输出,且不想让 nohup 创建文件,可以将标准输出和标准错误输出重定向。

我们常将 nohup 和 & 搭配到一块使用,执行命令如下 nohup command >/dev/null 2>&1 & 这样,就可以放心的等待进程运行结果了。

时间: 2024-10-13 00:59:22

后台执行进程的方法的相关文章

Linux后台执行的方法 - 关闭、退出不影响

难免会遇到在Linux,后台执行任务.下面,总结了一下关闭窗口任然在后台执行的方法,例如 #执行一个打包命令 tar czf /data/backup.tgz /data/backup 1. 采用& tar czf /data/backup.tgz /data/backup & ctrl+d #退出 才可以,如果直接关闭窗口,进程任然会被关闭 2. 采用nohup nohup tar czf /data/backup.tgz /data/backup ctrl+z #挂起到后台 bg #后

Linux命令后台执行的方法

当进程不是守护进程时,不能简单地在命令行后添加一个&,当终端关闭时,该进程也随之关闭.因为通常在终端起动的进程其父进程是终端进程.当终端关闭时,其所有子进程也随之关闭.使进程在后台执行需要使用nohup命令: nohup command > out.log 2>&1 & nohup的作用是将进程的父进程设置为1,即init进程,这样终端关闭时,不会影响该进程. 使用2>&1将标准错误输出也重定向到标准输出中,因为预定义的STDIN,STDOUT,STDER

后台执行脚本管理

防止脚本执行中断的方法: a.sh while.sh & b.screen 总结此命令 c.nohup /server/script/02/while.sh & crtl + c   停止任务 ctrl + z   暂停任务 bg     把任务放到后台执行 fg 把后台的第一个任务放到前台执行,如果有多个任务,可以用fg 加任务编号调出 jobs   查看当前执行的脚本或者任务 top 显示进程 nice 改变系统优先级 nohup 用户退出系统之后可以继续工作 pgrep 查看匹配条件

linux 如何让程序后台执行

$ (./test.sh &) $ setsid ./test.sh & $ nohup ./test.sh & 具体的转自:http://digdeeply.org/archives/06281192.html 在Linux中,如果要让进程在后台运行,一般情况下,我们在命令后面加上&即可,实际上,这样是将命令放入到一个作业队列中了: Example 1 2 3 4 5 $ ./test.sh & [1] 17208 $ jobs -l [1]+ 17208 Run

Linux命令后台执行技巧小结

1.最简单的方法: command & 例如: top & 此时显示job编号和后台进程号 [1] 14814 2.正在运行的程序放入后台 Ctrl - Z 3.查看有哪些后台进程及状态 jobs 4.将后台进程切换到前台执行 fg job编号 5.让后台暂停的进程继续执行 bg job编号 6.杀死后台执行程序 kill %job编号 7.让程序在后台执行,关闭终端也不退出 例如一个不断输出程序test.sh,如下 while [ True ] do echo hello sleep 1

Linux前台的程序转到后台执行(关闭终端而不杀死命令)

你是否经常遇到这样的情况,通过SSH或者终端putty连接到一台linux/unix机器,执行一个程序.一个脚本或者一条命令,但现在你需要关闭SSH或者终端,由于该该程序.脚本或者命令正在运行,一旦你直接关闭而不做任何处理这个进程就会一起关闭,做到一半的工作就这样浪费掉,实在是可惜! 下面介绍一种方法可以在需要关闭终端的时,让正在运行的程序.脚本或命令转到后台执行,假设你的程序.脚本或者命令正在执行,下面可进行这样操作: 1.按下ctrl+z2.输入命令bg3.输入disown (在输入时可能只

linux 命令行远程登录 后台运行命令的方法

http://blog.csdn.net/isuker/article/details/55061595 Linux 技巧:让进程在后台可靠运行的几种方法 https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/ 如何实现SSH断开后 进程仍然在后台运行 http://blog.csdn.net/v1v1wang/article/details/6855552 shell 输入与输出 http://blog.csdn.net/v1v1wang

实现iOS长时间后台的两种方法:Audiosession和VOIP(转)

分类: Iphone2013-01-24 14:03 986人阅读 评论(0) 收藏 举报 我们知道iOS开启后台任务后可以获得最多600秒的执行时间,而一些需要在后台下载或者与服务器保持连接的App是如何突破600秒的限制的呢?像网易公开课就可以在后台持续下载,优酷也可以在后台持续缓存,这是怎么做到的呢?一般来说,要实现iOS长时间后台运行,需要声明VOIP.Audio或GPS. Audiosession 实现方法很简单,就是在后台一直播放一个无声的音乐文件,这样就相当于声明了Audio,就可

后台执行命令:&和nohup command & 以及关闭、查看后台任务

当我们在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件.对于密集访问磁盘的进程,我们更希望它能够在每天的非负荷高峰时间段运行(例如凌晨).为了使这些进程能够在后台运行,也就是说不在终端屏幕上运行,有几种选择方法可供使用. 1.& 当在前台运行某个作业时,终端被该作业占据:可以在命令后面加上& 实现后台运行.例如:sh test.sh & 适合在后台运行的命令有f i n d.费时的排序及一些s h e l l脚本.在后台运