Unix 系统下检查某个进程号是否存在的取巧办法
kill -0 [pid]
例如,我们可以先查询下当前所有的 php-fpm
的进程
yufei$ ps aux | grep php-fpm yufei 536 0.0 0.0 4525236 8 ?? S 201219 0:00.00 /usr/local/opt/php/sbin/php-fpm --nodaemonize yufei 535 0.0 0.0 4525236 8 ?? S 201219 0:00.00 /usr/local/opt/php/sbin/php-fpm --nodaemonize yufei 439 0.0 0.0 4525492 100 ?? S 201219 0:12.42 /usr/local/opt/php/sbin/php-fpm --nodaemonize yufei 17904 0.0 0.0 4269080 820 s001 S+ 4:06下午 0:00.00 grep php-fpm
然后可以使用 kill -0 536
来判断进程是否存在
kill -0 536
再查询下当前所有的 php-fpm
的进程
yufei$ ps aux | grep php-fpm yufei 536 0.0 0.0 4525236 8 ?? S 201219 0:00.00 /usr/local/opt/php/sbin/php-fpm --nodaemonize yufei 535 0.0 0.0 4525236 8 ?? S 201219 0:00.00 /usr/local/opt/php/sbin/php-fpm --nodaemonize yufei 439 0.0 0.0 4525492 100 ?? S 201219 0:12.42 /usr/local/opt/php/sbin/php-fpm --nodaemonize yufei 17904 0.0 0.0 4269080 820 s001 S+ 4:06下午 0:00.00 grep php-fpm
发现进程 535 仍然存在
那么,问题来了, kill -0 [pid]
到底做什么用呢?
答案就是
kill -0 pid 不发送任何信号,但是系统会进行错误检查。
我们可以用来检查一个进程是否存在,存在则
echo $?
返回0
, 不存在返回1
当然了,各个系统有自己的稍微差异,比如苹果电脑的
存在则什么都不返回
kill -0 536
不存在则
kill -0 99222 -bash: kill: (99222) - No such process
目前尚无回复