Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Linux下用C语言实现进程的PID_C_Linux_Process - Fatal编程技术网

如何在Linux下用C语言实现进程的PID

如何在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

我需要使用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[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()。