Linux进程之-小结(fork-多进程-getpid/getppid-僵尸进程-wait函数)

1、fork函数

创建一个子进程。pid_t fork(void)  失败返回-1,成功返回值:(1)父进程返回子进程的ID(非0);(2)子进程返回0。

pid_t类型表示进程ID,但为了表示-1,它是有符号整形。(0不是有效进程ID,int最小为1)

注意:fork返回值不是返回两个值,而是fork后,fork函数变为两个,父子进程各自返回一个。

2、多进程

一次fork函数调用可创建一个子进程,创建n个子进程可以用for循环,但需注意创建完子进程后退出,不然子进程会伴随循环继续创建子子进程。

3、获取进程pid函数

pid_t getpid(void);//获取当前进程pid

pid_t getppid(void);//获取当前进程的父进程pid

区分一个函数是系统函数还是库函数依据:(1)是否访问内核数据结构 (2)是否访问外部硬件资源   二者有任一,即是系统函数;二者都无,则是库函数

4、僵尸进程

进程终止,父进程尚未回收,子进程残留资源(PCB)存放于内核中,变成僵尸进程。特别注意:僵尸进程无法用kill命令清除掉,可用进程回收进行清除。

5、wait函数

进程回收。

一个进程在终止时会关闭所有文件描述符,释放在用户空间分配的内存,但是它的PCB还保留着,内核在其中保存了一些信息:如果是正常终止则保留退出状态;如果是异常终止则保留着导致该进程终止的信号是哪个。这个进程的父进程可以调用wait或waitpid获取这些信息,然后彻底清除掉这个进程。

例如,一个进程的退出状态可以在shell中用特殊变量$?查看,因为shell是它的父进程,当终止时shell调用wait或waitpid得到它的退出状态同时策底清除掉这个进程。

   父进程调用wait函数可以回收子进程终止信息,该函数有三个功能:

  1. 阻塞等待子进程退出
  2. 回收子进程残留资源
  3. 获取子进程结束状态(退出原因)

6、作业

(1)创建子进程,调用fork后,在子进程调用自定义程序(段错误、浮点型错误),用waitpid回收,查看退出状态。

(2)验证子进程是否共享文件描述符,子进程负责写入数据,父进程负责读数据。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值