关闭终端linux如何结束进程,linux避免进程随终端关闭而被关闭

通常我们在终端运行命令来启动进程,但是当我们退出这个时,所启动的进程会被系统强制关闭,此篇文章,讨论一下,怎么解决这个问题。

这里指的终端既可以是你启动的一个bash,或者你在另外一段启动的ssh客户端;你启动的进程是以前台方式运行还是后台方式运行(就是命令行后面加一个&),终端关闭,进程同样会被系统关闭。

有2种方式来解决此问题:

nohup

disown

这两种方式有一个共同的特点,就是最后效果都是将我们的进程提交给系统的根进程(祖先进程),进程号为1的init进程来管理,因为它不会被系统关闭知道关机,因此我们进程可以持续运行。

nohup

no hang up的缩写,就是不要挂起。使用方法:

nohup mycmd &

mycmd就是你要执行的命令/进程,nohup会把mycmd进程到输出定位到当前目录的nohup.out,如果当前目录该用户没有写权限,则写到该用户的家目录下面。当执行完此命令后,你可以使用 pstree或者ps查看,此进程的父进程是不是init

disown

就是放弃拥有该进程的权利,放弃的结果就是init这个进程收养该进程。

使用方法是先以后台方式运行进程:

mycmd &

你执行此命令后,终端会立即输出进程号,比如是2222, 此时你使用ps或者pstree查看此进程的父进程,会发现父进程是你正在使用终端,然后执行:

disown 2222

这里的2222应为你实际的进程号。执行完此命令后,就完成了将进程管理权限移交给系统祖先进程init。

如果想在关闭ssh连接后刚才启动的程序继续运行怎么办,可以使用nohup。但是如果要求第二天来的时候,一开ssh,还能查看到昨天运行的程序的状态,然后继续工作,这时nohup是不行了,需要使用screen来达到这个目的。

虽然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 的子界面;

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

分享到:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值