linux环境下如何使进程在后台运行

在Linux中,如果我们希望进程在后台运行,一般来说,我们可以在命令后面添加它,这实际上是将命令放入作业队列中。



美元/ test.sh。



{ 1 } 17208



就业机会



{ 1 } + 17208 / test.sh运行。



对于已经在前台执行的命令,它也可以放在后台执行中。首先,用于暂停正在运行的进程。然后,BG命令用于将其余的工作放在后台。



美元/ test.sh。



{ 1 } +停止。 / test.sh



美元1



{ 1 } +。 / test.sh



就业机会



{ 1 } + 22794 / test.sh运行。



但是,如果进程在后台执行,则父进程是当前shell的进程。一旦父进程,它将所有的子进程发送挂断信号,和子过程也将退出后接收的问题。如果我们想继续这个过程当我们退出外壳,我们需要使用nohup忽略hangup信号,或者setsid将父进程init进程(进程数为1)。



回声$



二十一万七百三十四



使用nohup美元/ test.sh。



{ 1 } 29016



$ ps -ef grep测试|



51529710217340分/ 12 00:00:00 /斌/建议/ test.sh在11



51529713217340分/ 12 00:00:00 grep试验在11



美元/ test.sh setsid。



{ 1 } 409



$ ps -ef grep测试|



51541010 00:00:00 / bin SH / test.sh 11时49分



515413217340分/ 12 00:00:00 grep试验11时49分



以上实验表明使用nohup / setsid加进程在后台运行的应用,而目前壳牌退出的影响。那么做的一个过程,一直在后台运行,可以使用与命令:



美元/ test.sh。



{ 1 } 2539



就业机会



{ 1 } + 2539 / test.sh运行。



不认- h为1美元



$ ps -ef grep测试|



51541010 00:00:00 / bin SH / test.sh 11时49分



5152542217340分/ 12 00:00:00 grep测试11:52



还有另一种方式,即使过程实际上是在一个壳层,执行,这是因为setsid相同。方法很简单,和命令是括在括号中():



$()



$ ps -ef grep测试|



51541010 00:00:00 / bin SH / test.sh 11时49分



51512483217340分/ 12 00:00:00 grep试验在11:59



注:本文中的测试环境是红帽企业Linux 4版本(Nahant更新5),壳 /斌/ bash,不同的操作系统和 /斌/ bash会有所不同。例如,AIX的ksh,没有否认,但你可以用使用nohup P PID获得同样的效果,不认。



还有一种更有效的方法是利用屏幕,首先创建一个断开模式的虚拟终端,然后使用-r选项连接虚拟终端,它的任何命令,可以实现使用nohup的影响,当有多个命令需要连续执行的背景更方便:



屏幕DMS screen_test美元



屏幕列表



屏幕上有:



27963.screen_test(分离)



1插座在/tmp / / s-jiangfeng uscreens。



屏幕- R screen_test美元