我需要使用kill API终止进程.为此,我需要进程的进程ID.我尝试使用它:
ret = system("pidof -s raj-srv");
Run Code Online (Sandbox Code Playgroud)
但它没有返回正确的值.我不想使用这个来杀死进程:
ret = system("pkill raj");
Run Code Online (Sandbox Code Playgroud)
是否有任何API可用于获取进程ID?
cni*_*tar 18
您将获得返回状态system.那不是pid.你想要这样的东西:
char line[LEN];
FILE *cmd = popen("pidof...", "r");
fgets(line, LEN, cmd);
pid_t pid = strtoul(line, NULL, 10);
pclose(cmd);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,可能有多个进程实例在运行,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);
}
Run Code Online (Sandbox Code Playgroud)
该system函数返回的是正在执行的命令的返回代码。
你可以做的是这样的:
system("pidof -s raj-srv > /tmp/pid-of-raj-srv");
Run Code Online (Sandbox Code Playgroud)
然后读取文件的内容/tmp/pid-of-raj-srv。