02fock.c
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
printf("Hello,Process!\n");
pid_t pid = fork();
if(pid == -1)//错误处理
{
perror("fork failed");
return 0;
}
else if(pid > 0)
{
//这是父进程要做的事情
//fork给父进程返回子进程的ID
printf("这是父进程,我的ID是%d\n",getpid());
printf("这是父进程,我的父进程的ID是%d\n",getppid());
printf("这是父进程,我的子进程的ID是%d\n",pid);
}
else if(pid == 0)
{
//这是子进程要做的事情
printf("这是子进程,我的ID是%d\n",getpid());
printf("这是子进程,我的父进程的ID是%d\n",getppid());
}
printf("Goodbye,Process!\n");
return 0;
}
03fock.c
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int sum(int a,int b)
{
//return a + b;
exit(a+b);
}
int main()
{
fork();
sum(5,3);
printf("Hello,Process!\n");
return 0;
}
head.h
#ifndef __HEAD_H__
#define __HEAD_H__
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <semaphore.h>
#endif
04exit.c
#include "head.h"
int main()
{
pid_t pid = fork();
if(pid == -1)
{
}
else if(pid > 0)
{
printf("这是父进程,hello!\n");
sleep(30);
}
else
{
printf("这是子进程,我嗝屁了!\n");
exit(0);
}
}
05.c
#include "head.h"
int main()
{
pid_t pid = fork();
if(pid == -1)
{
}
else if(pid == 0)//子进程
{
printf("这是子进程,子进程ID:%d\n",getpid());
printf("这是子进程,父进程ID:%d\n",getppid());
//return 260;
exit(250);
}
else//父进程
{
printf("这是父进程,父进程ID为:%d\n",getpid());
int sta;
pid_t pid1 = waitpid(pid,&sta,0);
if(WIFEXITED(sta))
{
printf("sta = %d\n",sta);
printf("退出进程的ID:%d,退出码为%d\n",pid1,WEXITSTATUS(sta));
}
}
}
06.c
#include "head.h"
//自定义的中断服务处理函数
void my_sig_handler(int sig)
{
printf("xixi,你咋嗝屁了!\n");
wait(NULL);
}
int main()
{
signal(SIGCHLD,my_sig_handler);
pid_t pid = fork();
if(pid == -1)
{
}
else if(pid == 0)
{
printf("这是子进程,我马上要嗝屁了!\n");
sleep(3);
exit(0);
}
else
{
while(1)
;
}
}