#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
int main(int argc, char *argv[])
{
pid_t pid;
int i = 0;
pid = fork(); // 创建进程
if( pid < 0 ){ // 出错
perror("fork");
}
if(pid == 0){ // 子进程
while(1){
printf("I am son\n");
sleep(1);
i++;
if (3 == i){ //3秒后
kill(getppid(), SIGINT); // 给父进程 pid ,发送中断信号 SIGINT
}
}
}
else if(pid > 0){ // 父进程
while(1){
printf("I am father\n");
sleep(1);
}
}
return 0;
}
打印如下。
I am father
I am son
I am father
I am son
I am son
I am father
I am son
I am son
I am son
I am son
I am son
I am son
I am son
I am son
I am son
I am son
I am son
看一下最基础的fork进程程序
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(void)
{
pid_t pid;
printf("init pid is %d \n", getpid());
pid = fork();
if (pid == -1)
printf ("error fork");
else if(pid == 0)
{ //sleep(2);
printf("\n this is child, and child pid is %d,father pid is %d \n ", getpid(), getppid());
}
else
{
sleep(2);
printf("\n this is father, and child pid is %d,father pid is %d \n", pid,getpid());
}
return 0;
}
在父进程加上sleep函数,则子进程先运行结束,父进程后运行结束。打印如下。
init pid is 7758
this is child, and child pid is 7759,father pid is 7758
this is father, and child pid is 7759,father pid is 7758
去掉父进程的sleep函数,并在子进程中加上sleep,打印如下。
init pid is 7789
this is father, and child pid is 7790,father pid is 7789
this is child, and child pid is 7790,father pid is 1
则由上可知。父进程先结束,子进程成了孤儿进程,系统将其托孤给了1(init)进程,所以进程号改为1。
其中,getpid返回当前进程标识,getppid返回父进程标识。