fork后子进程保留了父进程的什么?

使用fork函数得到的子进程从父进程的继承了整个进程的地址空间

包括:

  1. 进程上下文
  2. 进程堆栈
  3. 内存信息
  4. 打开的文件描述符
  5. 信号控制设置
  6. 进程优先级、进程组号
  7. 当前工作目录
  8. 根目录
  9. 资源限制
  10. 控制终端等


子进程与父进程的区别在于:

  • 父进程设置的锁,子进程不继承(因为如果是排它锁,被继承的话,矛盾了)

  • 各自的进程ID和父进程ID不同

  • 子进程的未决告警被清除;

  • 子进程的未决信号集设置为空集。 -mickole博客

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
进程中,可以使用`waitpid`函数来等待子进程的结束,然后重新启动一个新的子进程。具体的步骤如下: 1. 在进程中使用`fork`函数创建一个子进程。 2. 在子进程中使用`execl`函数执行需要运行的程序。 3. 在进程中使用`waitpid`函数等待子进程结束。 4. 如果子进程正常结束,则使用`WIFEXITED`宏判断是否正常退出;如果子进程被信号终止,则使用`WIFSIGNALED`宏判断是否被信号终止。 5. 如果子进程正常结束或者被信号终止,则在进程中重新使用`fork`函数创建一个新的子进程并执行需要运行的程序。 代码示例: ``` #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h> int main() { pid_t pid; int status; while (1) { pid = fork(); if (pid == -1) { perror("fork"); exit(EXIT_FAILURE); } else if (pid == 0) { execl("/path/to/program", "program", NULL); perror("execl"); exit(EXIT_FAILURE); } else { waitpid(pid, &status, 0); if (WIFEXITED(status)) { printf("Child process exited with status %d\n", WEXITSTATUS(status)); } else if (WIFSIGNALED(status)) { printf("Child process terminated by signal %d\n", WTERMSIG(status)); } } } return 0; } ``` 在这个示例中,进程会不断地创建子进程并等待子进程结束。如果子进程正常结束,则在进程中重新创建一个新的子进程并执行需要运行的程序。如果子进程被信号终止,则在进程中也重新创建一个新的子进程并执行需要运行的程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值