如何在Linux下用C语言实现进程的PID
我需要使用kill API终止一个进程。为此,我需要进程的进程id。我尝试使用以下方法获取它:如何在Linux下用C语言实现进程的PID,c,linux,process,C,Linux,Process,我需要使用kill API终止一个进程。为此,我需要进程的进程id。我尝试使用以下方法获取它: ret = system("pidof -s raj-srv"); 但它没有返回正确的值。我不想使用以下命令终止进程: ret = system("pkill raj"); 是否有任何API可用于获取进程id?系统函数返回的是正在执行的命令的返回代码 您可以这样做: system("pidof -s raj-srv > /tmp/pid-of-raj-srv"); char line[LE
ret = system("pidof -s raj-srv");
但它没有返回正确的值。我不想使用以下命令终止进程:
ret = system("pkill raj");
是否有任何API可用于获取进程id?系统函数返回的是正在执行的命令的返回代码 您可以这样做:
system("pidof -s raj-srv > /tmp/pid-of-raj-srv");
char line[LEN];
FILE *cmd = popen("pidof...", "r");
fgets(line, LEN, cmd);
pid_t pid = strtoul(line, NULL, 10);
pclose(cmd);
然后读取raj srv的文件
/tmp/pid
的内容,您将获得系统的返回状态。这不是pid。你想要这样的东西:
system("pidof -s raj-srv > /tmp/pid-of-raj-srv");
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()
来使用pidof
的输出,但我相信有更好的方法(pidof
本身使用的方法)。也许它在/proc
中徘徊,我知道这不是一条新的线索,但由于我最近才遇到同样的问题,我会问你。您是否看到其中一个:
sysctl
提供所需信息,而无需通过系统(“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);
}
#包括
#包括
#包括
main()
{
char-pidline[1024];
字符*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(空,“”);
i++;
}
pclose(fp);
}
检查此选项是,opendir
和readdir
/proc
。但并非所有的unix都有/proc
@cnicutar:True,但它们也可能没有pidof
。也许,但它们会有ps
和grep
@cnicutar:。我的观点是,如果您乐于使用pidof
,那么使用/proc
可能不会让您担心。popen
是一种更好的方法,因为它不需要创建第一个链接断开的临时文件。第二个链接说,sysctl()。