qfedu-linux-advanced-level/day3/d2.c

34 lines
911 B
C
Raw Normal View History

2023-08-17 09:20:18 +08:00
#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;
}