【发布时间】:2017-07-27 05:47:57
【问题描述】:
fork 返回两次-
曾在父母中
小时候曾经
但是,就调用和返回行为而言,exec() 与其他系统调用有何不同?
【问题讨论】:
-
exec()根本不会返回...除非出现错误。
fork 返回两次-
曾在父母中
小时候曾经
但是,就调用和返回行为而言,exec() 与其他系统调用有何不同?
【问题讨论】:
exec() 根本不会返回...除非出现错误。
实际上,有一些不遵守“返回一次”的范式。
对fork() 的调用返回一次或两次 - 后者在成功时返回一次在父级和一次在子级中,前者在失败时仅在父级中返回一次.
对exec() 的调用将在失败时返回,但如果成功,当前进程会被新程序覆盖。
还有其他的,例如exit() 或abort(),预计根本不会返回。
【讨论】:
man exec --- "The exec() functions only return if an error has occurred. The return value is -1, and errno is set to indicate the error." 中找到一个条目以供将来参考
jmp_buf 也是longjmp,setjmp() 可以多次返回。
setjmp / longjmp 是 C 标准库函数,而不是系统调用。 (它们不需要内核帮助。)
exit(3) 不是系统调用,而是库函数,因为它必须处理 atexit(3) 安装的回调,之后,它应该调用 _exit(2) .同样的事情也适用于abort(3),它通常转化为对kill(2) 的调用。但无论如何都是很好的例子。