lea*_*135 22 unix linux shell background-process
我尝试使用nohup运行脚本,
nohup script.sh &
Run Code Online (Sandbox Code Playgroud)
当我尝试
ps -ef | grep "script.sh"
Run Code Online (Sandbox Code Playgroud)
除了使用该字符串作为参数运行的grep之外,我找不到它.
我做得对吗?这是否意味着该流程确实已完成执行?谢谢.
Edw*_*ale 16
在shell脚本的开头,将PID写入文件(例如,在/ var/run中).然后,您可以只搜索该PID以了解该过程是否已完成.您可以使用内置$$
变量获取shell脚本的PID .
要记录PID,请将脚本放在脚本的顶部:
echo $$ > /var/run/myscript.pid
Run Code Online (Sandbox Code Playgroud)
然后,检查它是否仍在运行:
ps -p `cat /var/run/myscript.pid`
Run Code Online (Sandbox Code Playgroud)
您可能无法以/var/run
普通用户身份进行写入.如果没有,请使用/tmp
unb*_*eli 15
取决于nohup实现,但在大多数情况下它将起作用.跑完之后
nohup script.sh &
Run Code Online (Sandbox Code Playgroud)
将PID存储到变量中.$!是最后一个后台进程的PID.
HISPID=$!
Run Code Online (Sandbox Code Playgroud)
然后你可以用ps或kill检查它是否存在:
ps -p $HISPID
kill -0 $HISPID
Run Code Online (Sandbox Code Playgroud)
与发布的其他解决方案不同,这不需要修改script.sh
归档时间: |
|
查看次数: |
60650 次 |
最近记录: |