先上代码:
#include <stdio.h>
#include <unistd.h>
int main()
{
printf("--------begin------\n");
pid_t ret = fork();
if(ret < 0)
{
perror("fork");
return 0;
}
else if(ret > 0)
{
//father
while(1)
{
printf("i am father abcdef\n");
sleep(1);
}
}
else
{
while(1)
{
printf("i am child 123456\n");
sleep(1);
}
}
return 0;
}
pid_t getpid(void); 谁调用获取谁的进程pid
pid_t getppid(void); 谁调用获取谁的父进程pid
整体流程如下
输入ps aux | grep ./test查看进程控制信息:
能看到有两个进程正在运行,但是看不出来两进程中的差异和联系,因此输入ps -ef,输入后能看到当前进程的PID和当前进程的父进程PPID。通过这两个数字信息我们可以确定父进程和子进程。
我们进行过滤查看我们想看的,ps -ef | grep ./test
其中第二列为当前进程,第三列为当前进程的父进程。
从上图容易看到20178为我们当前创建的进程,父进程为20177。
查看父进程的父进程,ps aux | grep 19583结果如下:
由图可以知道父进程的父进程是终端处理器bash(命令行解释器)。
一旦创建出来子进程之后,父进程和子进程就是抢占式执行;