#include <unistd.h> #include <sys/types.h> #include <stdio.h> #include <errno.h> int main(int argc,char **argv) { pid_t pid,old_ppid,new_ppid; pid_t child,parent; parent=getpid(); if((child=fork())<0){ printf(“fork error”); exit(1); }else if(child==0){ /*此时是子进程被调度运行*/ old_ppid=getppid(); sleep(2); new_ppid=getppid(); } else { sleep(1); exit(0); /*父进程退出,此时子进程 会被只派一个新的父进程PID,值为1*/ } printf("Original parent:%d\n",parent); printf("Child:%d\n",getpid()); printf("Child's old ppid:%d\n",old_ppid); printf("Child's new ppid:%d\n",new_ppid); exit(0);}
时间: 2023-06-16 16:06:42 浏览: 92
用c语言实现的逆序文本程序
这是一个简单的进程创建和进程间通信的程序,使用了fork()和getppid()函数。
程序先创建了一个父进程,然后通过fork()函数创建了一个子进程。子进程在运行时先用getppid()函数获取其父进程的PID,然后睡眠2秒钟,再次获取其父进程的PID。父进程在创建子进程后睡眠1秒钟,然后退出。
程序输出了原始父进程的PID、子进程的PID、子进程的旧父进程的PID和子进程的新父进程的PID。
当子进程运行时,它的父进程已经退出,所以它的新父进程的PID为1。
阅读全文