我现在想写个脚本来重启进程,但首先需要得知这个线程是不是在运行,是的话就杀掉。
我知道ps -ef|grep <参数> 可以获取含有<参数>的运行中的程序,但是每次获取都是有结果的,因为这个:(例如<参数>为java)
zsdx 7552 6702 0 11:36 pts/0 00:00:00 grep --color=auto java
我要怎么排除掉这个输出,才能实现判断进程的运行状态?
或者有什么其他的办法适用于这种情况的?谢谢。
我现在想写个脚本来重启进程,但首先需要得知这个线程是不是在运行,是的话就杀掉。
我知道ps -ef|grep <参数> 可以获取含有<参数>的运行中的程序,但是每次获取都是有结果的,因为这个:(例如<参数>为java)
zsdx 7552 6702 0 11:36 pts/0 00:00:00 grep --color=auto java
我要怎么排除掉这个输出,才能实现判断进程的运行状态?
或者有什么其他的办法适用于这种情况的?谢谢。
linux下面,对进程进行管理的通用的做法是在进程启动时,将进程号写到文件里面,可以去/var/run/目录里面看看,里面有各种.pid文件。管理的时候,读取这个文件获得进程号。
[root@nginx conf.d]# ps -aux | grep "nginx" | grep -v "grep"
root 1950 0.0 0.4 47904 2232 ? Ss 03:43 0:00 nginx: master process nginx
nginx 13545 0.0 0.5 48336 2504 ? S 22:27 0:00 nginx: worker process
[root@nginx conf.d]# ps -aux | grep "nginx" | grep -v "grep" > /dev/null
[root@nginx conf.d]# echo $?
0
需要根据实际情况做修改
补充一个
[root@nginx ~]# ps -C nginx
PID TTY TIME CMD
1950 ? 00:00:00 nginx
13545 ? 00:00:00 nginx
[root@nginx ~]#
7 回答5.4k 阅读
4 回答4.1k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
2 回答837 阅读✓ 已解决
2 回答3.3k 阅读
可以串一个
| grep -v grep
把grep去掉警告: 用ps+grep找进程其实是不可扩展的,如果将来有多个匹配的进程.. 安全的方法是启动时把pid写到文件,要杀掉时从pidfile读。或者交给supervisor管理。