我需要杀死一个使用kill API的进程。 为此,我需要进程的进程ID。 我试图得到它使用:
ret = system("pidof -s raj-srv");
但它没有返回正确的值。 我不想杀死使用这个过程:
ret = system("pkill raj");
有没有可以用来获取进程ID的API?
你正在获得system
的返回状态。 那不是pid。 你想要这样的东西:
char line[LEN]; FILE *cmd = popen("pidof...", "r"); fgets(line, LEN, cmd); pid_t pid = strtoul(line, NULL, 10); pclose(cmd);
system()
调用不返回pidof
的输出,它返回pidof
的返回码,如果成功则返回零。
你可以使用popen()
而不是system()
popen()
来获得pidof
的输出,但是我确定有更好的方法( pidof
本身使用的方式)。 也许它漫游/proc
。
system
函数返回的是正在执行的命令的返回码。
你可以做的是这样的:
system("pidof -s raj-srv > /tmp/pid-of-raj-srv");
然后读取文件/tmp/pid-of-raj-srv
。
我知道这不是一个新鲜的线索,但是由于我最近才面临同样的问题,我会问你。 你有没有看到这样的一个:
你可以使用sysctl
给你所需要的信息,而不必通过system( "bla, bla" )
调用。 起初似乎要复杂得多,但可能要看你的需要。
在这种情况下,可能有多个进程正在运行的实例,pidof返回空格分隔的pid字符串。
#include<stdio.h> #include<stdlib.h> #include<string.h> main() { char pidline[1024]; char *pid; int i =0 int pidno[64]; FILE *fp = popen("pidof bash","r"); fgets(pidline,1024,fp); printf("%s",pidline); pid = strtok (pidline," "); while(pid != NULL) { pidno[i] = atoi(pid); printf("%d\n",pidno[i]); pid = strtok (NULL , " "); i++; } pclose(fp); }