shell在指定目录下执行nohup_nohup:关闭shell程序依然执行

以前分享过Linux程序的前台和后台执行,但是前后台执行有一个缺陷,即关闭shell窗口(比如logout)后,程序也会被关闭,而且程序的打印会不断在shell中显示出来。而nohup命令(no hang up)可以解决在关闭shell后,程序依然执行,就相当于以系统服务的方式执行程序。

一般执行nohup名的方式:

nohup command > outinfo.txt &

命令后面的&,表示一开始就后台执行,否则就要手动使用Ctrl+z,然后bg N。

> outinfo.txt 试讲程序的打印输出到这个文件,方便查看。

如果是python程序的打印,最好配合使用python的-u命令,禁止打印缓存,这样才能及时看到程序的打印输出。比如:

$nohup python3 -u test.py > outinfo.txt &

还有几个问题:

1, 在程序执行过程中,如果把outinfo.txt删除,就再也无法看到打印了,如果在自建此文件,程序依然不会写入,此问题何解?

(1)不太好的方法:定期手动重启这个程序。

(2)?

2, 重新login之后,jobs命令是无效的,不过因为nohup,程序进程还在,但是如果有多个python程序需要这样运行,只能通过记住pid的方式,有其它更好的方式吗?

可以考虑将python程序编译成可执行文件,nohup执行这个可执行文件,然后即可通过文件名称来区分不同的程序。但是,编译成可执行文件后,python -u的效果还有吗?(pyinstaller没有安装成功....还没测试)

通过ps -ax命令解决,可以查看进程执行的那个py文件。

nohup的原理:

当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。

hangup 名称的来由

在 Unix 的早期版本中,每个终端都会通过 modem 和系统通讯。当用户 logout 时,modem 就会挂断(hang up)电话。 同理,当 modem 断开连接时,就会给系统发送 hangup 信号来通知其关闭所有子进程。

关闭shell让进程继续执行,还可以使用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值