我有一个名为Test
的c ++可执行文件。我想在执行完成后找出GetExitCodeProcess()代码。
我可以通过在另一个包装器程序中编写以下内容来找出状态代码:
...
int status = system("./Test");
然后检查WIFSIGNALED / WIFSTOPPED等状态。
但是,不是编写包装器程序,我可以通过编写bash脚本从.Test
程序的pid中获取退出状态代码吗?
编辑: 执行./Test后在bash中写'$'是否能解决上述问题?
编辑:摘要是 - 当我从命令行运行可执行文件时,我如何(不是程序)获得退出状态。
答案 0 :(得分:3)
你可以在执行命令/ bash后执行echo $?
,这将输出程序的退出代码。
每个命令都返回退出状态(有时称为返回
状态或退出代码)。成功的命令返回0
,而a
不成功的一个返回通常可以解释的非零值
作为错误代码。行为良好的UNIX
命令,程序和实用程序返回
成功完成后,0
退出代码,但有一些例外情况。
echo $? # Non-zero exit status returned -- command failed to execute.
echo
exit 113 # Will return 113 to shell.
# To verify this, type "echo $?" after script terminates.
# By convention, an 'exit 0' indicates success,
#+ while a non-zero exit value means an error or anomalous condition.
或者,如果您希望识别后台进程/脚本的返回代码(以nohup
开头或在后台&
运算符中运行),您可以启动进程/脚本的pid并等待它终止然后获得退出代码。
$ ./foo.sh &
[1] 28992 # Some random number for the process-id
$ echo $! # Get process id of the background process
28992
$ wait 28992 # Waits until the process determined by the number is complete
[1]+ Done ./foo.sh
$ echo $? # Prints the return code of the process
0
答案 1 :(得分:1)
你正在接近这个错误 - system()已经返回存在状态:成功为零,失败为非零。可能发生的情况是您的“测试”脚本编写错误或您正在测试“状态”错误。我见过开发人员的以下脚本错误。
run_some_java
echo "Done"
他们在任何时候都没有跟踪退出代码,脚本会返回echo命令的最后一个退出代码。这使它永远成功。这里有两种正确退出的方式(我知道其他编码器的东西比一些更先进的方法更好,但我认为这不是这个线程的意思)。抓取,然后走路,然后跑。
如果您需要退出状态,但希望执行所有shell命令。
return_code=0
mv $letters $ARCHIVE
return_code=$(($return_code + $?))
mv $letters $ARCHIVE
return_code=$(($return_code + $?))
exit $return_code
如果你想在失败时退出,可以set -e
查看,这是另一种方式。
mv $letters $ARCHIVE || exit 1
mv $letters $ARCHIVE || exit 2