Articles of 退出代码

如何将返回码传递给at_exit函数

是否有一个“内置”的方式来知道退出代码传递给出口处理程序安装与atexit内退出? 例如,如果调用exit(EXIT_FAILURE) ,我的处理程序将执行与exit(EXIT_SUCCESS)情况下不同的操作。 我可以用一个全局variables来解决这个问题,但是无论我的程序在哪里,这都会否定exit的安慰。

返回无法处理的POSIX信号的代码

这是关于在POSIX(Linux)环境上运行的应用程序。 大多数信号(例如Ctrl + C – 信号2,SIGINT)以及其他信号都被处理。 完成后, exit()系统调用将从处理程序中调用,并带有一个理想的退出代码。 但是,有些信号如Signal 9和Signal 15无法处理。 不幸的是,启动给定应用程序的父进程(外部脚本)需要知道并清理一些东西,如果信号9或15是终止的原因。 是否有一个预定义的退出代码,可以通过父进程知道上面的? 启动应用程序的脚本是一个bash_script。 应用程序本身是在C.

我怎样才能得到程序运行与perf stat的退出代码?

我必须得到一些程序的统计数据,即perf stat perf stat -o stat.log ./a.out 我也必须得到这些程序的退出代码,因为它们不会总是以0退出。假设我有一个简单的程序,它将返回SIGSEGV: main(){*(int*)0=0;} 现在,当我运行它时,我得到: $ ./a.out Segmentation fault (core dumped) $ echo $? 139 当我运行它与perf然而我得到 $ perf stat -o stat.log ./a.out ./a.out: Segmentation fault $ echo $? 0 我得到0,就像程序完成没有错误。 当我用perf stat运行它时,如何获得a.out的退出代码? 编辑:a.out是黑匣子,我不能以任何方式修改它。

为什么debugging时生成的程序退出代码会改变?

我有一个C ++程序,用于testing另一个程序不会崩溃。 父代码(我们称之为“parentProg”)看起来像这样: int run(const char * command) { … int retCode = system(command); printf("Code is %d\n",retCode); if(retCode == 134) //128 + SIGABORT { // Record error conditions … } } 命令variables包含正在testing的程序(我们将其称为“childProg”)。 使用以前的Linux发行版,此代码按预期工作。 如果a.out崩溃或命中一个断言,它将返回134,error handling代码将运行。 但是,在我升级到更新的Linux发行版后,不再是这种情况。 相反,当使用GDB或nemiver作为衍生程序运行时,我会看到返回代码为6。 奇怪的是,如果我单独运行子程序,或者使用DDD,它将恢复到134。 对于下面的testing,我已经修改childProg只是下面的代码: #include <assert.h> int main(int argc, char * argv[]) { assert(0); return 0; } childProg本身 [user@localhost multi]$ […]

如何获得pipe道中第一个命令的退出状态?

我做了一个简单的脚本: $ more test.bash #!/bin/bash echo test exit 1 当我运行脚本时,退出状态应该是1 $ /tmp/test.bash echo $? 1 但是当我运行这个如下 /tmp/test.bash | tr -d '\r' 1>>$LOG 2>>$LOG echo $? 0 退出状态是0 ,(不像预期的那样1 ) 看来退出状态来自tr命令。 但我想要的是从脚本获取退出状态 – test.bash。 为了从脚本中获得正确的退出状态,而不是从pipe道后面的命令中,我需要在语法中添加/更改什么?

如何绕过python sys.exit()的0-255范围限制?

在Python(在Linux系统上),我正在使用os.system()启动一个命令并检索返回代码。 如果返回码不是0,我想用相同的返回码退出程序。 所以我写道: ret = os.system(cmd) if ret != 0: print "exit with status %s" % ret sys.exit(ret) 当返回代码小于256时,它工作正常,但是当它大于255时,所用的退出代码是0.我如何让sys.exit()接受大于255的代码? 编辑:限制实际上是255 实际上, retvariables接收256,但sys.exit()无法使用它,所以程序返回0。 当我手动启动cmd ,我发现它返回1,而不是256。

所有可能的退出代码为cp

查看cp的手册页,我只发现当复制成功时没有错误,命令以0退出,并且在任何错误时都以大于0的数字。 但是,我找不到具体的退出代码映射到具体情况的任何详细的描述。 在任何地方都有这样的描述,甚至是标准化的,还是每个Unix / Linux发行版都有自己的退出代码集,以适应不同的场景?

如何在batch file脚本的循环中打印程序的返回值?

任务是运行一个程序(同一个程序)十次,并为每次运行输出退出代码(主函数的返回值)。 所以我想运行一个batch file(Windows),像这样: FOR /l %%x IN (1,1,10) DO ( AutomatedTest.exe cip.log ECHO %ERRORLEVEL% ) 上面的代码应该这样做,如果你直觉地思考,但它不工作,因为它运行的代码实际上是: ( AutomatedTest.exe cip.log ECHO 0 ) 这件作品被执行了10次。 任何想法如何使其工作? 谢谢!

如果批处理系列中没有负退出,批处理如何在TFS构buildstream程中使用-1与MSBuild一起退出

我有一个批次,保持通过TFS退出-1退出。 被调用的批处理没有负面退出。 它调用而不是直接运行一些其他批处理和命令行工具,可以返回一个负面的退出代码,但他们都被call ,不直接跑,当我设置一个失败点,我exit /b 1或exit 1 …. targets(350):用代码-1退出命令“call C:\ Build \ BuildTools \ callSigning.bat”。 远程进入失败的盒子并运行批处理不会产生错误! 什么可以触发这个exit -1与MSBuild? 有一些我不知道的幕后警告吗? 在.proj文件里面,我有这样一行: <Exec Command="call $(SrcRoot)\BuildTools\callSigning.bat" ContinueOnError="false"/> 而这批次没有负面退出代码… @echo off pushd %~dp0 IF EXIST "%~dp0signVerification.log" echo Cert renewed and successfully signed once for this TFS job already&&exit 0 IF NOT EXIST .\renew_certificate.bat echo missing renew_certificate.bat&&exit 1 SETLOCAL EnableDelayedExpansion […]

为什么这个命令无法打印Python命令的正确退出码?

在cmd.exe窗口中,当我运行python -c "exit(12)" ,然后运行echo %errorlevel% ,它打印12 。 之后,当我运行python -c "exit(13)" & echo %errorlevel% ,它打印12 。 为什么第二个命令无法打印正确的退出码?