我想在我的应用程序中使用 system() 打印 pstack 信息,但它失败并返回 256。但是我将这些代码提取到一个新的主函数中,没关系。为什么?
char cmd[256] ;
string pstackCmd;
struct timeval tv;
struct tm lt;(&tv, NULL);
localtime_r(&tv.tv_sec, <);
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);
}
最佳答案
取而代之的是:
if (retValue != 0)
你需要这个:
if (retValue == -1 || WEXITSTATUS(retValue) != 0)
也就是说,您首先通过查看 system()
是否返回 -1 来检查是否失败;如果没有,则命令的退出状态(传统上,零表示成功)。
关于c++ - 调用 system() 返回 256,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26375514/