call system() return 256

假如想象 提交于 2020-01-17 04:36:08

问题


I want to system() to print pstack info in my application, but it failed and return 256.But I pick up these codes as below to one new main function,that's ok. why?

char cmd[256] ;
string pstackCmd;
struct timeval tv;
struct tm lt;(&tv, NULL);

localtime_r(&tv.tv_sec, &lt);
sprintf(cmd, "pstack `pgrep app` > pstack_%04d%02d%02d%02d%02d%02d%03d",
                            lt.tm_year+1900,
                            lt.tm_mon+1,
                            lt.tm_mday,
                            lt.tm_hour,
                            lt.tm_min,
                            lt.tm_sec,
                            (int)(tv.tv_usec/1000));
pstackCmd = string(cmd);
int retValue = system(pstackCmd.c_str());
if ( retValue != 0)
{
    printf("pstack `pgrep app`,retValue:%d",retValue);
}

回答1:


Instead of this:

if (retValue != 0)

You need this:

if (retValue == -1 || WEXITSTATUS(retValue) != 0)

That is, you check for failure first by seeing if system() returned -1; if it did not then the exit status of the command (with zero meaning success, traditionally).




回答2:


This mean that something went wrong and the command was not successfully executed. The return value 256 actually means 1.

For more info check these link:

System Return Code (was: 256)

system()

If you'd like to manually inspect system's failure, you can check all possible failure modes by inspecting `$?` like this:

if ($? == -1) {
    print "failed to execute: $!\n";
}
elsif ($? & 127) {
    printf "child died with signal %d, %s coredump\n",
        ($? & 127),  ($? & 128) ? 'with' : 'without';
}
else {
    printf "child exited with value %d\n", $? >> 8;
}

Where $? >> 8 is bitshifting by 8, which is essentially dividing by 256.



来源:https://stackoverflow.com/questions/26375514/call-system-return-256

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!