34 lines
911 B
C
34 lines
911 B
C
|
#include <sys/types.h>
|
||
|
#include <sys/stat.h>
|
||
|
#include <fcntl.h>
|
||
|
#include <unistd.h>
|
||
|
#include <sys/wait.h>
|
||
|
#include <stdio.h>
|
||
|
|
||
|
int main(int argc, char const *argv[])
|
||
|
{
|
||
|
pid_t pid = fork();
|
||
|
if (pid == 0) // 子进程
|
||
|
{
|
||
|
printf("子进程 %d 立即结束\n", getpid());
|
||
|
sleep(2); // 休眠 2 秒
|
||
|
// return 10;
|
||
|
_exit(12);
|
||
|
}
|
||
|
else if (pid > 0) // 父进程
|
||
|
{
|
||
|
printf("父进程 %d 运行中\n", getpid());
|
||
|
// 回收资源 (wait/waitpid) ,不然子进程资源依然占用
|
||
|
int status;
|
||
|
// int pid2 = wait(&status);
|
||
|
waitpid(pid, &status, 0);
|
||
|
// 右移 8 位为状态值
|
||
|
// printf("%d 子进程返回的状态值: %d\n", pid, (status & 0xff00) >> 8);
|
||
|
if (WIFEXITED(status))
|
||
|
{
|
||
|
printf("%d 子进程返回的状态值: %d\n", pid, WEXITSTATUS(status));
|
||
|
}
|
||
|
}
|
||
|
return 0;
|
||
|
}
|