如何在C中的Linux中获得一个进程的PID

我需要杀死一个使用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

我知道这不是一个新鲜的线索,但是由于我最近才面临同样的问题,我会问你。 你有没有看到这样的一个:

  • 在C中按名称获取进程ID
  • C函数来查找进程ID并杀死它
  • man sysctl(3)

你可以使用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); }