后台执行进程的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了后台执行进程的方法相关的知识,希望对你有一定的参考价值。

后台进程:

我们每次在终端窗口执行命令的时候,进程总会一直占用着终端,走到进程结束,这段时间内,我们在终端的输入是没有用的。而且,当终端窗口关闭或网络连接失败后,再次打开终端,会发现进程已经中断了。这是因为用户注销或者网络断开时,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 & 这样,就可以放心的等待进程运行结果了。


以上是关于后台执行进程的方法的主要内容,如果未能解决你的问题,请参考以下文章

在后台进程运行时执行当前流程 - 单反应式编程

Linux 技巧:让进程在后台可靠执行的几种方法

linux 后台进程

linux系统中挂起操作和强制结束操作(后台运行程序方法)

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

Win 10 应用开发在App所在的进程中执行后台任务