我正在下载一些软件;我可以看到pid
下载过程top
。假设它是1001
.
如何才能使我的计算机在进程1001
退出后关闭?
答案1
这个单行循环检查进程 ID 1001 的 ps 输出,并休眠 2 秒,然后再次检查,直到找不到它(进程已退出),此时循环结束并继续执行下一个命令这是关闭。
while [[ $(ps 1001 &> /dev/null)$? -eq 0 ]]; do sleep 2 ;done && shutdown -h now
如果你想确保进程1001是你认为的进程,你可以添加grep来测试,例如如果进程应该是iTunes,你可以这样做:
while [[ $(ps 1001 |grep -q "iTunes" &> /dev/null)$? -eq 0 ]]; do sleep 2 ;done && shutdown -h now
答案2
干得好。经过测试并工作。
while [ 1 ] ; do
ps 1001 > /dev/null || { shutdown -h now ; break ; }
sleep 1
done
答案3
运行以下命令:
while kill -0 1001 &> /dev/null;
do
sleep .1
done;
poweroff
使用kill -0
不会发送实际信号,但会在给定进程运行时报告 true。重定向&>
到/dev/null
(位桶),因此任何错误或成功消息都不会包含在程序的输出中。这将休眠十分之一秒并检查进程,直到它不再运行,然后执行poweroff
.