正如我們所知,exec系列函數調用最終會調用execve()
這是一個系統調用,剩餘的是庫函數。因此,通常,execve()
適用於其他exec*()
函數也是如此。C中的exec系列函數
我想知道,在執行execve()
時,是否所有的信號都被阻塞直到成功,或者是否有辦法將信號傳遞給對應於exec的pid
? (我知道它不會在成功時返回,並且調用函數的進一步執行不會發生)
正如我們所知,exec系列函數調用最終會調用execve()
這是一個系統調用,剩餘的是庫函數。因此,通常,execve()
適用於其他exec*()
函數也是如此。C中的exec系列函數
我想知道,在執行execve()
時,是否所有的信號都被阻塞直到成功,或者是否有辦法將信號傳遞給對應於exec的pid
? (我知道它不會在成功時返回,並且調用函數的進一步執行不會發生)
我不確定我的問題是否正確,因此如果我錯了,請隨時糾正。
但是,基本上,是的,從流程的角度來看,系統調用可以被視爲'原子'。因此,一旦啓動了系統調用,只有內核已經啓動,它將不會釋放該進程,直到運行新命令或出錯代碼失敗或者提高SIGKILL
信號(因爲SIGKILL
是唯一不可阻止的信號)。
但是,一旦execve()
產生了一個新的進程(並從內核返回),它完全可以與任何信號中斷。
我的問題很簡單直接,execve(或任何exec函數)阻止所有信號,直到完成? – theartist33
是的。因爲它位於內核空間(不在用戶空間中)。 – perror
那麼如何結束/終止執行功能被卡住(掛起)而不會從其他上下文中終止進程ID? – theartist33
不確定你在問什麼;你能提供一些僞代碼來說明你在問什麼嗎? – csl
@csl我的問題很簡單直接,execve(或任何exec函數)阻止所有信號,直到它完成? – theartist33
查看http://unix.stackexchange.com/questions/16455/interruption-of-system-calls-when-a-signal-is-caught – csl