有关Linux下父子进程内容

1 . 父进程可以利用wait()/ waitpid()等待子进程的结束,避免僵死子进程的产生,当然也可以循环的wait()/ watipid()来等待所有的子进程的结束;最好可以用法是,在子进程结束时,会向父进程发送的SIGCHLD信号,父进程通过 signal()/sigaction()来响应子进程的结束.具体实例可参考:TestFork4.c,关键代码如下:
 

2 . 当父进程结束时,还未结束的子进程就会成为孤儿进程,系统会把init进程作为其父进程;从而使得子进程在父进程结束后,继续运行.

3 . 对于父子进程共存时,产生相关信号如SIGINT时,父子进程都能接受到此信号,只是先由父进程响应,再由父进程把此信号传递给子进程;但要注意的地方 是:(1)如父进程没有对该信号进程自定义处理,则父子进程都接受信号的默认处理,eg:在没有对SIGINT进程自定义处理时,产生此信号,由父子进程 都马上中止;(2)如父进程自定义了信号处理方法,则子进程一样接受此信号和其信号处理方法;此时,若子进程成为孤儿进程,则此时的子进程不会再接受此信 号和其信号处理方法.具体实例可参考 TestFork6.c,关键代码如下:


4 . 在创建子进程时,内核将父进程的很多内容拷贝给子进程,同时在调用fork()后,父子进程共享正文部分(其实也相当于拷贝);注意拷贝两字,所以子进程中修改的东东对父进程没有作用,除非利用父子进程通信方法;因此,要特别注意子进程的代码编写,如动态空间的释放问题,内存信号修改问题;具体实例可参考:TestFork1.c,关键代码如下:

结果:(hello 为gets(buf)语句)
   hello
   child:xiaofeng
    parent:hello

5 . 补充下有关信号的几个结论:
   (1)信号处理有三种模式,一为默认处理方式;二为信号忽略方式;三为自定义信号处理方法;
   (2)  当一个进程睡眠在可中断优先级时,进程捕获的信号将中断进程的睡眠

 

2009-06-12 13:19:43

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值