繁体   English   中英

LInux中的进程

[英]processes in LInux

每个人我对程序有一些疑问:如果我有一些程序:

int main()
{
int value = 0;
...
return value;
}

我的操作系统创建了新的进程,它使用execv()来运行这个程序,当我return value时我return value转移回进程,我的问题该进程将如何结束? 它是否执行exit(value),当value是我程序中的值时? 提前感谢您的帮助

main()返回基本上等同于调用exit() ,并启动Normal Termination过程。

正常终止会导致以下操作:

  1. 使用atexit或on_exit函数注册的函数按其注册的相反顺序调用。 此机制允许您的应用程序指定自己的“清理”操作,以便在程序终止时执行。 通常,这用于执行诸如将程序状态信息保存在文件中或解锁共享数据库中的锁之类的操作。

  2. 关闭所有打开的流,写出任何缓冲的输出数据。 此外,删除了使用tmpfile函数打开的临时文件。

  3. 调用_exit() ,终止程序。

最后,系统在进程终止后进行常规清理(文件关闭,退出代码报告,子进程终止或重新分配给init ...)请参见终止内部

这是为了调用新进程execve() 运行你的代码的过程。 execve() 新的可执行映像替换调用可执行文件的映像 - 对execve()的成功调用永远不会返回。

因此,您的代码不会向该进程返回值 - 它会向父进程返回一个值,该进程调用fork()来创建调用execve()的子进程。 如果该父进程仍未运行,则返回值将传递给init进程(PID 1)。

执行main时,将创建一个父进程为init的新进程。 当执行return时,main进程退出并将返回状态(值)发送到init进程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM