找到特定任务的pid的最佳和最有效的方法是什么。说:
ps -ef | grep "\/usr\/sbin\/watchdog" | cut -d" " -f2
有没有更有效的方法来找到相同的。我想从我的应用程序中杀死看门狗进程。我正在考虑使用system命令来做同样的事情。
system("kill -9 `ps -ef | grep "\/usr\/sbin\/watchdog" | cut -d" " -f2`);
是否有更优化的方法来做同样的事情。
答案 0 :(得分:3)
您可以使用pidof
kill -9 `pidof <your application name>`
您的应用程序名称可以是/ usr / sbin / watchdog
答案 1 :(得分:2)
也许这是一个理想的世界解决方案......
要获取看门狗PID,您只需打开文件'/var/run/watchdog.pid'
。
一旦知道了进程的PID,杀死进程的最好方法就是不要调用'system'
函数,而是调用UNIX API的'kill'
函数:
#include <sys/types.h>
#include <signal.h>
int
kill(pid_t pid, int sig);
这可以避免产生新流程。
如果文件'/var/run/watchdog.pid'
不存在,您可以恢复为system / kill / pidof。
答案 2 :(得分:1)
要显示当前用户所拥有的所有进程,请输入ps ux并点击return:
$ ps ux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
jhaas 3064 0.1 3.6 18324 9088 ? S 17:55 0:00 /usr/bin/gnome-session
jhaas 3107 0.0 0.3 3128 968 ? S 17:55 0:00 /usr/bin/ssh-agent /etc/X11/xinit/Xclients
....
现在,如果你想终止例如emacs进程,你将在上表(3216)中查找进程标识符(PID),并说:
$ kill -9 3216
答案 3 :(得分:1)
您应该遍历/proc
中的子目录,找到要杀死的进程。然后使用kill(2)
。
答案 4 :(得分:1)
看看:http://linux.die.net/man/5/proc
您可以搜索/proc
文件系统,并找到指向/proc/$(PIC)/exe
/usr/sbin/watchdog
一旦你得到pid kill
它(参见man 2 kill)
答案 5 :(得分:0)
pgrep
实际上非常好用,特别是如果您打算使用正则表达式来匹配进程名称。它是procps
包的一部分,它应该已经安装在任何Linux系统上(ps
在同一个包中)。
以下是一个示例用法:
psychotic@bismuth ~ $ pgrep 'fire.*'
2902
2903
2904
6979
psychotic@bismuth ~ $ pgrep -l 'fire.*'
2902 firegl
2903 firegl
2904 firegl
6979 firefox-bin