通常我们在终端运行命令来启动进程,但是当我们退出这个时,所启动的进程会被系统强制关闭,此篇文章,讨论一下,怎么解决这个问题。
这里指的终端既可以是你启动的一个bash,或者你在另外一段启动的ssh客户端;你启动的进程是以前台方式运行还是后台方式运行(就是命令行后面加一个&),终端关闭,进程同样会被系统关闭。
有2种方式来解决此问题:
- nohup
- disown
这两种方式有一个共同的特点,就是最后效果都是将我们的进程提交给系统的根进程(祖先进程),进程号为1的init进程来管理,因为它不会被系统关闭知道关机,因此我们进程可以持续运行。
- nohup
nohup mycmd &
- disown
mycmd &
disown 2222
虽然nohup很容易使用,但还是比较“简陋”的,对于简单的命令能够应付过来,对于复杂的需要人机交互的任务就麻烦了。
其实我们可以使用一个更为强大的实用程序screen。流行的Linux发行版(例如Red Hat Enterprise Linux 4)通常会自带screen实用程序,如果没有的话,可以从GNU screen的官方网站下载。
1)使用
执行screen , 按任意键进入子界面;
我用ping命令开始执行,如果下班了,但是想关闭ssh以后ping继续运行,那么按ctrl+a 再按d 这样暂停了子界面,会显示[detached]的字样,这时候 我回到了父界面;
用screen –ls查看目前子界面的状态screen -ls
There is a screen on: 22292.pts-3.free (Detached)
1 Socket in /tmp/screens/S-root,这里的22292其实是子界面的pid号;
如果回到子界面 用screen –r 22292,一下子弹到了ping 的子界面;
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.