在c中使用时,系统命令的返回值是多少

时间:2011-11-16 10:02:54

标签: c shell

我正在使用linux系统命令来杀死c文件中的某些进程。我只是想知道可能的不同返回值。当我搜索网络时,我不清楚。以下命令我在c。

中使用
ret = system("pkill raj");
  • 假设如果没有使用raj运行的进程将返回什么值?
  • 假设如果命令pkill raj失败,返回值是什么?
  • 假设有一些名称为raj的进程。执行此操作后将返回值。

2 个答案:

答案 0 :(得分:3)

来自手册页:

  

错误时返回的值为-1(例如fork(2)失败),以及   否则返回命令的状态。后者回归          status的格式为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;
}

答案 1 :(得分: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。