【转】Linux 后台运行命令 nohup 输出 pid 到文件

时间:2020-07-31    阅读次数:99    来源:博客园

用nohup可以启动一个后台进程。让一个占用前台的程序在后台运行,并静默输出日志到文件:

nohup command > logfile.txt &

但是如果需要结束这个进程,一般做法是用ps命令找出这个进程,用grep过滤进程名,最后得到pid,然后再用kill命令结束进程:

ps -ax | grep command  # 查看PID
kill -9 [PID] # 结束PID对应的进程

有一个更简单的办法是,在用nohup创建进程时,就用shell的特殊变量$!把最后一个后台进程的PID保存下来:

nohup command > logfile.txt & echo $! > pidfile.txt

需要结束进程的时候,直接进行kill:

kill -9 `cat pidfile.txt`

检查进程是否存在,直接用 kill -0 pid

kill -0 `cate pidfile.txt`

kill -0 pid 不发送任何信号,但是系统会进行错误检查。

我们可以用来检查一个进程是否存在,存在则 echo $? 返回 0 , 不存在返回 1

当然了,各个系统有自己的稍微差异,目前服务器上广泛使用的 CentOS,存在不返回任何信息,不存在返回【-bash: kill: (数字) - No such process】说明

附:Shell中的特殊变量说明

变量说明
$$Shell本身的PID(ProcessID)
$!Shell最后运行的后台Process的PID
$?最后运行的命令的结束代码(返回值)
$-使用Set命令设定的Flag一览
$*所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$#添加到Shell的参数个数
$0Shell本身的文件名
$1~$n添加到Shell的各参数值。$1是第1参数、$2是第2参数…。


【责编:EasonJim】
回复(0 条回复)
游客
论坛咨询