我需要使用kill API终止进程。为此,我需要进程的进程ID。我尝试使用它来获取它:
ret = system("pidof -s raj-srv");
但它没有返回正确的值。我不想用这个来杀死这个过程:
ret = system("pkill raj");
是否有可用于获取进程ID的API?
答案 0 :(得分:16)
您的返回状态为system
。那不是pid。你想要这样的东西:
char line[LEN];
FILE *cmd = popen("pidof...", "r");
fgets(line, LEN, cmd);
pid_t pid = strtoul(line, NULL, 10);
pclose(cmd);
答案 1 :(得分:3)
在这种情况下可能会有多个进程实例运行,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);
}
答案 2 :(得分:2)
system()
调用不返回pidof
的输出,它返回pidof
的返回码,如果成功则为零。
您可以使用pidof
代替popen()
来使用system()
的输出,但我确信有更好的方式(pidof
本身使用的方式)。也许它徘徊在/proc
。
答案 3 :(得分:1)
system
函数返回的是正在执行的命令的返回码。
你可以做的是这样的事情:
system("pidof -s raj-srv > /tmp/pid-of-raj-srv");
然后阅读文件/tmp/pid-of-raj-srv
的内容。
答案 4 :(得分:1)
我知道这不是一个新线程,但由于我最近才遇到同样的问题,我会问你。你有没有看到其中一个:
您可以使用sysctl
为您提供所需信息,而无需通过system( "bla, bla" )
来电。
一开始似乎要复杂得多,但根据您的需要可能值得。