在linux系统下实现对system() 函数对fork() ,exec(),waitpid()函数的调用。求大神解答
1个回答
展开全部
不知道你这实现这些函数的调用是什么意思,是要重写这些接口吗?还是举个例子说明?
我解释一下吧:
(1)system()其实就是对fork()和exec()函数族等的封装。
(2)fork()是用来产生子进程的,是现在我知道的唯一一个返回两个值的函数(有过有另外的,麻烦网友指出),返回-1表示执行失败;否则返回大于0的值时,表示是子进程的进程号,返回0时,表示父进程创建子进程成功。
(3)exec()不是一个函数,是函数族,有execl(),execv(),execle(),execve(),execlp(),execvp(),它们常用于子进程中“脱胎换骨”,就是父进程创建子进程后,子进程几乎是父进程的拷贝(只有很少的东西不一样,如进程号(PID)等),然后子进程调用exec()函数族执行其他的程序,即将原来进程的东西全部清除掉,称为一个崭新的进程,所以叫“脱胎换骨”。
(4)waitpid()是用在父进程中等待进程退出的,如果父进程不调用这个接口,那么它有可能先于子进程退出,那么子进程就会称为孤儿进程,继而被init进程(PID为1的进程,Linux启动后第一个启动的进程)收养。或者父进程并未退出,也未调用这个接口,但是子进程已经执行完成,那么子进程就会成为一个僵尸进程。
具体例子在网上找找吧,都不是很难。
我解释一下吧:
(1)system()其实就是对fork()和exec()函数族等的封装。
(2)fork()是用来产生子进程的,是现在我知道的唯一一个返回两个值的函数(有过有另外的,麻烦网友指出),返回-1表示执行失败;否则返回大于0的值时,表示是子进程的进程号,返回0时,表示父进程创建子进程成功。
(3)exec()不是一个函数,是函数族,有execl(),execv(),execle(),execve(),execlp(),execvp(),它们常用于子进程中“脱胎换骨”,就是父进程创建子进程后,子进程几乎是父进程的拷贝(只有很少的东西不一样,如进程号(PID)等),然后子进程调用exec()函数族执行其他的程序,即将原来进程的东西全部清除掉,称为一个崭新的进程,所以叫“脱胎换骨”。
(4)waitpid()是用在父进程中等待进程退出的,如果父进程不调用这个接口,那么它有可能先于子进程退出,那么子进程就会称为孤儿进程,继而被init进程(PID为1的进程,Linux启动后第一个启动的进程)收养。或者父进程并未退出,也未调用这个接口,但是子进程已经执行完成,那么子进程就会成为一个僵尸进程。
具体例子在网上找找吧,都不是很难。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询