在 bash 中获取进程的退出状态
Get exit status of a process in bash
我有一个名为Test
的C++可执行文件。我想在执行完成后找出GetExitCodeProcess()
代码。
我可以通过在另一个包装程序中编写以下内容来查找状态代码:
...
int status = system("./Test");
然后检查 WIFSIGNALED/WIFSTOP 等状态。
但是,我可以通过编写 bash 脚本从.Test
程序的 PID 获取退出状态代码,而不是编写包装程序吗?
编辑:执行后在 bash 中编写$
./Test
是否可以解决上述问题?
编辑:摘要是 - 当我从命令行运行可执行文件时,我(不是程序)如何获得退出状态?
您可以在执行命令/bash 后简单地执行echo $?
,这将输出程序的退出代码。
每个命令都返回退出状态(有时称为返回状态或退出代码)。成功的命令返回一个0
,而不成功返回一个通常可以解释的非零值作为错误代码。运行良好的UNIX
命令、程序和实用程序返回成功完成后0
退出代码,但也有一些例外。
# Non-zero exit status returned -- command failed to execute.
echo $?
echo
# Will return 113 to shell.
# To verify this, type "echo $?" after script terminates.
exit 113
# By convention, an 'exit 0' indicates success,
# while a non-zero exit value means an error or anomalous condition
或者,如果您希望识别后台进程/脚本的返回代码(以 nohup
开头或在后台&
运算符中运行),您可以启动进程/脚本的 pid 并等待它终止,然后获取退出代码。
# Some random number for the process-id is returned
./foo.sh &
[1] 28992
# Get process id of the background process
echo $!
28992
# Waits until the process determined by the number is complete
wait 28992
[1]+ Done ./foo.sh
# Prints the return code of the process
echo $?
0
另请查看 Bash 黑客维基 - 退出状态
你正在接近这个错误 - 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
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 试图在崇高中奔跑. 错误 已发生: 收集2.exe: 错误: ld 返回 1 退出状态
- collect2:错误:ld 返回 1 个退出状态未定义的引用
- C++ collect2:错误:ld 返回 1 退出状态
- 找不到 -llibmysqld Collect2.exe:错误:ld 返回 1 退出状态
- 每次我要使用外部资源时,我都会得到:collect2。exe:错误 ld 返回 1 退出状态
- 当出现错误ld return 1退出状态时,如何编译程序
- 无法访问 Arduino 结构字段。错误"退出状态 1。xxxx 不命名类型"
- "Extern"对象问题:错误:Id 返回 1 个退出状态
- c++ (C::B) 错误:ld 返回 1 个退出状态
- 在 c++ 中捕获 shell 脚本退出状态
- 对"displayForStudent(int, int const*, double const*, int)"的未定义引用 collect2.exe:错误:ld 返回 1 个退出状态
- 使用类[错误] LD返回1退出状态
- 如何解决退出状态 1 错误
- 错误 (Id) 返回 1 个退出状态
- 退出状态 1 令牌之前的预期主表达式'.'
- 错误:LD返回1个退出状态-CodeBlocks