每个人我对程序有一些疑问:如果我有一些程序:
int main()
{
int value = 0;
...
return value;
}
我的操作系统创建了一个新进程,它使用execv()来运行这个程序,当我return value
我将值转移回进程时,我的问题是这个进程将如何结束?它是否执行退出(值),当值是我的程序中的值时?提前感谢您的帮助
答案 0 :(得分:7)
从main()
返回基本上等同于调用exit()
,并启动Normal Termination程序。
正常终止会导致以下操作:
使用atexit或on_exit函数注册的函数按其注册的相反顺序调用。此机制允许您的应用程序指定自己的“清理”操作,以便在程序终止时执行。通常,这用于执行诸如将程序状态信息保存在文件中或解锁共享数据库中的锁之类的操作。
关闭所有打开的流,写出任何缓冲的输出数据。此外,删除了使用tmpfile函数打开的临时文件。
_exit()
被调用,终止程序。
最后,系统在进程终止后进行常规清理(文件关闭,报告退出代码,子进程已终止或重新分配到init
...)请参阅Termination internals
答案 1 :(得分:2)
为调用execve()
而创建的新进程正在运行代码的进程。 execve()
使用新的可执行映像替换调用可执行文件的映像 - 成功调用execve()
永远不会返回。
因此,您的代码不会向该进程返回值 - 它会向父进程返回一个值,该进程调用fork()
来创建名为execve()
的子进程。如果该父进程仍未运行,则返回值将传递给init
进程(PID 1)。
答案 2 :(得分:-1)
执行main时,将创建一个父进程为init的新进程。当执行return时,主进程退出并将返回状态(值)发送到init进程。