如何将进程脱离于shell运行?

Posted 王万林 Ben

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将进程脱离于shell运行?相关的知识,希望对你有一定的参考价值。

问题

如何将进程脱离于shell运行?

分析

在shell中运行的进程,当shell退出时这些进程会收到SIGHUP信号。如何让进程免于因shell退出产生的SIGHUP信号影响呢?

解决

执行命令时

1. 执行命令加上nohup

$ nohup <command> &

这样command执行会对SIGHUP免疫,当terminal断开也不会影响到command的执行。

2. 执行命令加上setsid

$ setsid <command>

3. 加上disown

$ <command> & disown

4. 在screen里执行命令

$ screen

然后在screen里执行命令。即使terminal断开,screen会话还在。

与这个类似的,还有其它terminal multiplexer,如tmux。

执行命令后(将正在运行的进程)

将进程放在后台运行,然后使用disown命令

~ ⌚ 22:32:14
$ sleep 3600
^Z
[1]  + 1737893 suspended  sleep 3600

~ ⌚ 22:32:17
$ bg
[1]  + 1737893 continued  sleep 3600

~ ⌚ 22:32:18
$ jobs
[1]  + running    sleep 3600

~ ⌚ 22:32:23
$ disown %1

~ ⌚ 22:32:24
$ jobs     

~ ⌚ 22:32:31
$ 

以上是关于如何将进程脱离于shell运行?的主要内容,如果未能解决你的问题,请参考以下文章

守护进程详细总结

Linux守护进程

Linux 守护进程三

Linux下使Shell 命令脱离终端在后台运行

如何在脚本中获取进程ID

守护进程