2011-11-16 18 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。