Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.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
C 在Linux上执行进程之前获取pid_C_Linux_Process - Fatal编程技术网

C 在Linux上执行进程之前获取pid

C 在Linux上执行进程之前获取pid,c,linux,process,C,Linux,Process,在进程实际执行之前,我如何打印进程id?是否有一种方法可以获取以前执行的进程id并仅增量 i、 e printf(); execvp(进程->参数[0],进程->参数); exec系统调用系列保留当前PID,因此只需执行以下操作: if(fork() == 0) { printf("%d\n", getpid()); execvp(process->args[0], process->args); } 在fork(2)上分配新的PID,它将0返回给子进程,将子进程的

在进程实际执行之前,我如何打印进程id?是否有一种方法可以获取以前执行的进程id并仅增量

i、 e

printf();
execvp(进程->参数[0],进程->参数);

exec系统调用系列保留当前PID,因此只需执行以下操作:

if(fork() == 0) {
    printf("%d\n", getpid());
    execvp(process->args[0], process->args);
}
fork(2)上分配新的PID,它将0返回给子进程,将子进程的PID返回给父进程。

您需要fork()然后运行一个exec()函数。要从子进程获取数据,您需要在子进程和父进程之间进行某种形式的通信,因为fork()将创建父进程的单独副本。在本例中,我使用pipe()将数据从子进程发送到父进程

int fd[2] = {0, 0};
char buf[256] = {0};
int childPid = -1;

if(pipe(fd) != 0){
   printf("pipe() error\n");
   return EXIT_FAILURE;
}

pid_t pid = fork();
if(pid == 0) {
   // child process
   close(fd[0]);
   write(fd[1], getpid(), sizeof(int));
   execvp(process->args[0], process->args);
   _exit(0)
} else if(pid > 0){
   // parent process
   close(fd[1]);
   read(fd[0], &childPid, sizeof(childPid));
} else {
   printf("fork() error\n");
   return EXIT_FAILURE;
}
printf("parent pid: %d, child pid: %d\n", getpid(), childPid);
return 0;

你为什么要这样做呢???@obounaim这实际上是你知道子进程的PID的方式,所以你知道如何处理它们-fork()返回子进程的PID,它由execk保存,所以我猜这可能不是@Milk所追求的(可能是forked进程的PID)——在运行fork之前,内核都不知道。
int fd[2] = {0, 0};
char buf[256] = {0};
int childPid = -1;

if(pipe(fd) != 0){
   printf("pipe() error\n");
   return EXIT_FAILURE;
}

pid_t pid = fork();
if(pid == 0) {
   // child process
   close(fd[0]);
   write(fd[1], getpid(), sizeof(int));
   execvp(process->args[0], process->args);
   _exit(0)
} else if(pid > 0){
   // parent process
   close(fd[1]);
   read(fd[0], &childPid, sizeof(childPid));
} else {
   printf("fork() error\n");
   return EXIT_FAILURE;
}
printf("parent pid: %d, child pid: %d\n", getpid(), childPid);
return 0;