2011-11-16 16 views
1

我正在使用linux系統命令殺死c文件中的一些進程。我只想知道可能的不同返回值。當我搜索網絡時,我沒有清楚的想法。在c中使用以下命令。什麼是系統命令在c中使用時的返回值

ret = system("pkill raj"); 
  • 假設,如果有與拉吉運行沒有進程會是怎樣的返回值?
  • 假設如果命令pkill raj失敗,返回值是什麼?
  • 假設有一些名稱爲raj的進程。執行此操作後,將返回值。
+3

您是否瞭解手冊頁?像在Linux/UNIX終端中輸入'man -s3 system'時得到的那樣? – thiton

+0

嗯是啊..去了它..它是有點難以解釋什麼在那裏提到.. :( – Raj

+0

你習慣了它^^ xD – Bort

回答

3

從手冊頁:

返回的值是1的錯誤(例如,叉(2)失敗),以及以其他方式命令的 返回狀態。後者返回 狀態的格式爲wait(2)中指定的格式。因此,該命令的退出代碼將爲WEXITSTATUS(狀態)。如果 /bin/sh無法執行,則退出狀態將爲退出命令的狀態(127)。

因此,您需要檢查WEXITSTATUS(ret)是否爲您的pkill命令的返回值。

代碼示例:除非調用系統出現故障

#include <stdio.h> 
#include <stdlib.h> 


int main(int argc, char **argv) 
{ 
     int status; 
     if((status = system("kill -9 13043")) != -1){ 
       fprintf(stdout, "kill command exit status: %d\n", WEXITSTATUS(status)); 
     } 

     return 0; 
} 
+0

...在檢查-1之後 –

+0

WEXITSTATUS僅在退出命令(WIFEXITED(status)非零)時纔有效考慮system(「kill $$」 )。請參閱wait(2)。 –

0

系統將返回pkill的退出狀態。 pkill的返回這些有點荒謬值,

EXIT STATUS 
    0  One or more processes matched the criteria. 
    1  No processes matched. 
    2  Syntax error in the command line. 
    3  Fatal error: out of memory etc. 

其中排除它們的使用由圖案殺流程如果該過程的當前的運行狀態是未知的。例如,如果運行'pkill raj'並得到1的返回值,那是因爲pkill不匹配'raj'並不是因爲它未能終止raj進程,這將導致返回值爲0並出現錯誤stderr上的消息。出於這個原因,我會建議不要使用pkill。使用pgrep來匹配進程名稱,一旦你有一個pid,使用kill來殺死該pid。