2013-01-18 30 views
1

我想在C++的(非主)線程(pthread)中使用方法system()。例如,在一個線程中使用system()C++

system("/path/to/some/script.sh"); 

這是允許的嗎?如果是這樣,是否安全,我是否應該採取任何預防措施?

的原因,我問的是,我已經從代碼評論家以下注釋:

「的規則系統()只能從一個單線程的進程調用我想你需要將您的新代碼移到單獨的應用程序中。「

該評論的第一句是否有效?

+2

首先,爲了生成RSA密鑰對,最好使用'libssl'而不是將'system()'調用一起調用'ssh-keygen'來調用...... – 2013-01-18 19:13:54

回答

5

從GNU/Linux實現system開始,它在命令執行過程中修改信號掩碼進程。在多線程程序中,我們遇到了令人討厭的驚喜,例如如果另一個線程fork s在同一時間。

+0

^所以,我可以採用你的答案是'應該避免在多線程程序中使用system()'? – tormentorres

+0

也許不是那麼強烈,就像「避免多線程程序的系統()通常/經常很好地證明」。如果我知道*沒有'fork' /'exec'和'SIGINT' /'SIGQUIT' /'SIGCHLD'處理程序和掩碼並不重要 - 我可以冒着使用'system'的風險。 –

0

我不會因爲各種各樣的原因而這樣做,信號掩碼只是一個問題。

一般而言,fork和線程是一個棘手的組合,需要小心處理。現有的庫函數可能不是用多線程程序編寫的。

相關問題