关于进程的一些小问题

一、fork().创建进程的方式有两种,一种系统创建,一种父进程创建。

1、fork()系统调用可以创建一个新的进程,新的进程将成为调用fork的进程的子进程。so,新的进程是调用fork进程的子进程。子进程继承父进程几乎所有的资源,如进程代码段和用户数据段。但不继承父进程设置的文件锁、父进程设置的警告。

2、创建一个子进程后,父子进程会争夺CPU,抢到者执行,未抢到者挂起等待。

3、调用 wait()或waitpid() ,可以使用父进程等待子进程执行完毕在执行当前程序。

4、fork()调用一次会有两个不同返回值。一个是父进程调用fork()后的返回值,其值为子进程ID,另外一个是子进程调用fork()的返回值,其值为 0.

5、子进程共享父进程打开的文件描述符,但父进程对文件描述符的改变不会影响子进程中的文件描述符。

二、vfork()用法与fork()大致相同,但有些独特之处

1、使用fork()时只是对父进程资源的复制。而vfork()并不将父进程的地址空间完全复制,而是共享父进程的地址空间。,也就是说子进程完全运行在父进程之上。子进程对数据的修改父进程也可见。

2、fork()创建子进程后,那个进程运行是不确定的。但vfork()时保证子进程先运行。当调用exec()或exit()后父进程才运行。

三、守护进程守护进程是指在后台运行的、没有控制终端与之相连的进程。编写守护进程以下步骤。

1、让进程后台运行。方法是调用fork()产生一个子进程。然后让父进程退出。

2、调用ssid()创建一个新会话期。

3、禁止进程从新打开控制终端。方法是再一次调用fork()创建一个子进程,在使调用fork()的进程退出。

4、关闭不在使用的文件描述符。方法是使用for()循环,关闭从0到 最高的值的文件描述符值。

5、更改当前目录为根目录。使进程不在与文件系统联系。方法使用chdir("/")。

6、将 文件创建时的屏蔽字设置为0.方法使用umask(0)将屏蔽字清零。

7、处理SIGCHID信号。

四、关于exec()

调用fork()或vfork()后一般会使用exec()执行一个新的程序。但并不是生成新的进程,而是废弃原来程序的数据段和堆栈段。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值