Linux終端我可以在終端使用打開程序:控制用C++程序
stringstream s;
s<<"./~/rajat/app -parameter";
system(s.str().c_str());
我的應用程序不斷在終端運行,我想從同一個程序中要做的就是關閉這個應用程序什麼,使用新參數再次打開它。這個怎麼做?
Linux終端我可以在終端使用打開程序:控制用C++程序
stringstream s;
s<<"./~/rajat/app -parameter";
system(s.str().c_str());
我的應用程序不斷在終端運行,我想從同一個程序中要做的就是關閉這個應用程序什麼,使用新參數再次打開它。這個怎麼做?
system()
只允許您啓動另一個進程並取回退出代碼。您無法控制其他進程的生命週期。
如果要啓動其他進程並對其進行控制,則需要使用其他方法。經典的做法是將fork()
你自己的進程分成兩個,exec()
這個子進程中的其他進程。然後父母會從fork()
呼叫中獲得孩子的PID,然後可以在要終止時向父母發送適當的信號給父母。
這有點麻煩(特別是一旦你開始不得不處理SIGHUP和清理殭屍進程),但我不知道一個標準或Boost庫爲你做了討厭的位。您應該在開始手動編寫之前檢查它。
如果你確實去了fork()
,網上有很多指南可以幫助你瞭解幾十年來圍繞它的具體情況和習慣用法。
你可以添加一個例子嗎? – rajat
您需要提供一些方法來通過管道(或其他IPC機制)從外部控制'app'或使其響應信號(例如SIGHUP),並且您的控制應用程序可以使用這些方法來終止它,然後根據需要重新執行它。 – Rook
你能否告訴我負面投票的原因? – rajat