即使通过system()调用成功运行命令后,我的返回值也为-1。 有关更多信息,请参阅以下C代码。
system("ping -w 3 -c 1 -q -I 63.254.203.24 63.254.203.26 >/dev/null");
然后我正在检查这个system()调用的返回值,即使它是pingable但我发现-1为返回值。
答案 0 :(得分:7)
查看实际返回值使用WEXITSTATUS(n)
以及system
未返回实际值的原因是因为(这仅对linux有效)它是使用{{1}实现的},fork
和exec
后者返回进程的状态,该进程包含进程是正常结束还是由于信号加上实际返回值,并且访问那些您将不得不使用的值在wait
WEXITSTATUS(n)
之类的宏来提及这些宏
man 3 wait
的返回值部分:
错误时返回的值为-1(例如,fork(2)失败),并且 否则返回命令的状态。后者的返回状态是 以wait(2)中指定的格式。因此,退出代码 命令将是
man system
。如果/ bin / sh不能 执行后,退出状态将是执行命令的状态WEXITSTATUS(status)
。
答案 1 :(得分:1)
幸运的是,我得到了答案。由于内存故障导致fork失败。 使用system()调用不是一个好主意。
感谢您的支持和回答。