C中的系统功能如何工作

mSa*_*yam 3 c unix

我已经读过系统函数在内部使用execl,fork和wait函数.所以,我试图模拟系统的工作而不使用它.但我无法实现同样的工作.

当我们使用系统函数调用程序时,下面的代码(之后)system()函数调用也会执行.所以为了模拟系统功能,我在下面写了这段代码:

int main()
{
    printf("In controller Start: %d\n\n",getpid());
    system("./prog1");
    printf("Forking New Process %d\n\n",fork());
    printf("Process Id: %d\n\n",getpid());
    execl("./infinite",0);
    printf("In controller End\n\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在运行"无限"程序后的上述代码中,最后一行没有打印出来.即printf("In controller End\n\n");

如何打印最后一行并执行"无限"程序而不使用系统功能.

如果有人可以解释系统功能的逐步工作,如系统首先调用哪个函数等等,那将是很好的.

为什么执行不会持续到最后一行,如果我们做了一个简单的函数调用而不是execl就必须这样做.

脚注: - 无限:是使用C代码创建的二进制文件.

Som*_*ude 5

最后一行不会被打印,因为它永远不会被执行.该execl函数不会返回,如果一切正常,而是替换与一个在调用程序.

我强烈建议你阅读的手册页forkexecl.


简而言之,fork将当前进程拆分为两个,并根据返回父进程或子进程返回不同.然后在子进程中进行exec调用,而父进程继续执行它想要的操作.然而wait,父母必须在子进程上完成,否则子进程将成为所谓的"僵尸"进程.

在代码中,子进程调用exec.