nohup 停止_nohup 使用与进阶

本文详细介绍了如何使用nohup命令在Linux中后台运行程序,包括忽略挂断信号、重定向输入输出、实时输出控制、缓存设置以及进程管理。通过实例演示了如何避免ignoring input消息,调整输出到文件和实时更新,以及利用kill和ps命令停止和查找进程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nohup 使用与进阶

nohup命令是Linux上运行程序必学的命令之一。

使用该命令运行程序可以忽略挂断信号。一般最后配合&,使程序在后台执行,并且在终端退出后不打断程序执行。

nohup <command> &

nohup运行时返回程序运行的进程号,命令默认输出到当前目录下的nohup.out文件。

$ nohup python temp.py &[1] 31323$ nohup: ignoring input and appending output to 'nohup.out'[1]+  Done                    nohup python temp.py

正常结束时会给出Done

指定输入输出

$ nohup python temp.py >temp.log 2>&1 &[1] 31430$ [1]+  Done                    nohup python temp.py < /dev/null > temp.log 2>&1

指定输出到temp.log文件。

2 - stderr指标准错误输出,1 - stdout指标准输出,&1表示1输出通道,2>&1表示将2重定向到1,即将标准错误输出传递给标准输出。

$ cat temp.lognohup: ignoring input------

查看temp.log文件,发现多了一行ignoring input

为了避免产生此消息,给定输入,但是此程序本身不需要输入,给空输入的方法是引用/dev/null

$ nohup python temp.py </dev/null >temp.log 2>&1 &

实时输出

nohup默认使用缓存,不实时输出结果,为了让结果及时的输出,可以将缓存强制设为0。

stdbuf命令能够修改与程序关联的三个标准I/O流的缓冲操作,i - inputo - outpute - error

python自身也有缓存机制,使用-u参数不使用缓存。

nohup stdbuf -i0 -o0 -e0 python -u temp.py < /dev/null > temp.log 2>&1 &

停止运行

在运行程序时,nohup会返回进程号,因此可以使用kill命令结束该进程。

$ nohup stdbuf -i0 -o0 -e0 python -u temp.py < /dev/null > temp.log 2>&1 &[1] 9243$ kill -9 9243$ [1]+  Killed                  nohup stdbuf -i0 -o0 -e0 python -u temp.py < /dev/null > temp.log 2>&1

kill -9代表的信号是SIGKILL,表示进程被终止,需要立即退出,该信号不会被系统阻塞。

一般我们不会记住进程号,使用top命令可以查看目前正在运行的进程,找到对应进程号,但是这种方式较为麻烦。

使用ps命令可以轻松的找到进程号。

$ ps -aux | grep "python -u temp.py" biodb    15705  0.0  0.0  32372  9232 pts/5    S    16:32   0:00 python -u temp.pybiodb    15764  0.0  0.0  14428  1040 pts/5    S+   16:33   0:00 grep --color=auto python -u temp.py

a : 显示所有程序, u : 以用户为主的格式来显示,x : 显示所有程序,不区分终端机。

第一个进程即为正在运行的程序,第二个进程是grep自己的进程。

随后使用kill

$ kill -9 15705$ [1]+  Killed                  nohup stdbuf -i0 -o0 -e0 python -u temp.py < /dev/null > temp.log 2>&1

我是 SSSimon Yang,关注我,用code解读世界

cce1406b2c60dc591af2d1686a59beb2.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值