return code of system()

hari picture hari · Aug 1, 2011 · Viewed 9.7k times · Source
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int main() {

int res = system("ps ax -o pid -o command | grep sudoku | grep gnome > /dev/null");

printf("res = %d \n", res);

return 0;
}

I want to see if sudoku is running or not by just examining the return code of system() (or any other call for that matter). I do not want any output to be printed anywhere.

I do not quite understand the return code of system() even after looking at the man page

Whether sudoku is running or not, I get res = 0.

Answer

cnicutar picture cnicutar · Aug 1, 2011

First of all, you should be using WEXITSTATUS(res). The standard clearly states:

If command is not a null pointer, system() shall return the termination status of the command language interpreter in the format specified by waitpid().

I suspect the problem is that the command actually succeeds (grep finds itself). Try not to redirect the output for a moment:

[cnicutar@fresh ~]$ ./test
  989 sh -c ps ax -o pid -o command | grep sudoku | grep gnome
res = 0

So, since every commands executes successfully, the return code will be 0 :-). You might have better luck with pgrep and the like.