我有一个程序是:
import java.io.*;
import java.util.*;
public class ExecBashCommand {
public static void main(String args[]) throws IOException {
if (args.length <= 0) {
System.err.println("Need command to run");
System.exit(-1);
}
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("./nv0914 < nv0914.challenge");
Process process1 = runtime.exec("echo ${?}");
InputStream is = process1.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
//System.out.printf("Output of running %s is:", Arrays.toString(args));
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:nv0914是一个bash可执行文件,nv0914.challenge是一个文本文件.当我在终端中运行任何正常命令时,如果我使用后检查退出代码echo ${?}.现在我想通过使用程序来做同样的事情,但程序只是提供输出 …
我有一个将执行三个应用程序的Perl脚本.所有这些都有不同的退出代码状态.
第一个应用程序退出代码状态为1.应用程序正常退出,没有任何问题.(成功)
第二个应用程序退出代码状态为99.仍然,应用程序正常退出没有任何问题.(成功)
最后,第三个应用程序退出代码状态为0.与第一个和第二个相同,应用程序正常退出而没有任何问题.(成功)
注意:已将退出代码状态向右移8位.
问题是,如果成功运行,退出代码状态是否总是返回0?
请不要苛刻评论,我只是困惑.请指教.
我使用Processvia ProcessBuilder来运行用C代码生成的可执行文件.我正在抓住Process.exitValue()这个退出值的反应.我注意到并非所有退出值都来自可执行文件.例如,我得到退出值139并且在我的C代码中没有任何地方返回139的退出值.
我试图找到退出值的概述,但我找不到这个,现在我发现退出值可以取决于操作系统.(我顺便使用Ubuntu).
一切顺利的时候,唯一可以肯定的退出值是0.是否有关于退出值的规范?我可以确定某个范围只能用于我自己的程序吗?为操作系统保留了哪些退出代码.
我发现139可能是C代码中的内存错误.我想摆脱可能.我无法获得退出值的任何概述(例如139 = .....)
这是简化的代码:
ProcessBuilder p = new ProcessBuilder(executableName,
executableArguments);
final Process shell = p.start();
InputStream shellIn = shell.getInputStream();
int shellExitStatus = shell.exitValue();
Run Code Online (Sandbox Code Playgroud)
注意:在Ubuntu shell中运行C可执行文件根本不会产生任何错误(即退出值0).但是,在Java中执行相同的命令会退出值139.
我在Qt中构建了一个包含两个按钮的应用程序:退出按钮和导入按钮.按下导入按钮时,屏幕上的滚动区域中会显示一个按钮列表(文件loggers.csv包含数据1; 2; 3; 4; 5;).
这一切都很好,但是当我按下退出按钮(当然应该关闭所有内容)时,应用程序没有正确停止(Qt的停止按钮仍处于活动状态,并且播放按钮不是).当我运行调试器并按下退出按钮时,它会给出一个错误:为RtlFreeHeap(0ADF0000,0028FE40)指定的地址无效.有谁能够帮我?
主要
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.showFullScreen();
return a.exec();
}
Run Code Online (Sandbox Code Playgroud)
Mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtGui>
#include "logger.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QPushButton exit_btn;
QPushButton import_btn;
private slots:
void createMenus();
void exit();
void import();
private:
int window_width;
int window_height;
int numLoggers;
int numSelected;
QVector<Logger*> loggers; …Run Code Online (Sandbox Code Playgroud) 我需要从蚂蚁那里打电话给sbt.我正在使用"exec"任务执行此操作,如下所示:
<target name="publish-jar">
<exec executable="sbt.bat" failonerror="true">
<arg value="publish"/>
</exec>
</target>
Run Code Online (Sandbox Code Playgroud)
如果sbt任务失败,我需要ant任务"失败",这就是使用的原因failonerror="true".但是,这不起作用.当sbt任务失败时,ant不会报告失败的构建.
这看起来像这里讨论的问题: Ant exec resultproperty不起作用.建议的解决方法是从中删除"/ B" sbt.bat.换句话说,改变:
exit /B %ERROR_CODE%
Run Code Online (Sandbox Code Playgroud)
至
exit %ERROR_CODE%
Run Code Online (Sandbox Code Playgroud)
但是,正如一位评论者所说:
这样做的缺点是,如果直接运行批处理文件进行测试,它将终止你的shell.您可以在批处理文件中使用if和arg来选择\ b,当ant调用它时,正常退出时不选择.
问题: 当发生故障时是否有修复:(1)不终止调用者的shell和(2)将退出代码传播给ant?
这是运行我的ant任务的输出.实际错误在这里并不重要(我故意不配置存储库来发布,强制错误):
C:\dev\la\sdf3\modules\test>ant publish-jar
Buildfile: C:\dev\la\sdf3\modules\test\build.xml
publish-jar:
[exec] [info] Loading global plugins from C:\Users\jn\.sbt\0.13\plugins
[exec] [info] Set current project to test (in build file:/C:/dev/la/sdf3/modules/test/)
[exec] :: loading settings :: file = C:\dev\la\sdf3\modules\ivysettings.xml
[exec] [info] :: delivering :: com.jn#test;SNAPSHOT ::
SNAPSHOT :: integration :: Fri Mar 14 08:45:58 HST …Run Code Online (Sandbox Code Playgroud) 如果带有EXIT陷阱的Bash脚本中出现语法错误,是否可以将退出代码传播给调用者?例如,如果我有:
#! /bin/bash
set -eu
trap "echo dying!!" EXIT
echo yeah
echo $UNBOUND_VARIABLE
echo boo
Run Code Online (Sandbox Code Playgroud)
然后,即使脚本没有真正成功结束,运行它也会提供退出代码0:
$ bash test.sh
yeah
test.sh: line 8: UNBOUND_VARIABLE: unbound variable
dying!!
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)
但是如果我注释掉退出陷阱,则脚本返回1.或者,如果我使用返回非零(例如/bin/false)的命令替换带有未绑定变量的行,则该退出值将按照我希望的方式传播.
我有一个WPF应用程序,有时会退出,退出代码为-1073740771。该问题不会以任何方式发生,并且因系统而异。在某些系统中,此问题的发生率不到总病例数的10%,而在其他系统中,我发现该问题的发生率几乎占总病例的30%。我无法形成任何可靠的复制步骤,而且似乎是随机发生的。
症状包括:单击关闭按钮后,应用程序退出,但是在任务管理器中,我仍然可以看到该过程徘徊了约20-30秒,然后退出。该应用程序似乎正在正常关闭(从功能的角度来看),因此它可能不会对使用它的客户产生太大影响,但是错误代码正在日志中记录,这很烦人。
当我从Visual Studio调试时,也会发生此问题,但是try-catch块中没有异常。
在的文档中ServiceBase.ExitCode,它只是说应将其设置为“在停止服务以指示错误之前...为非零值”。此数字是特定于应用程序的还是标准错误代码及其含义的列表?某处?
假设您的脚本由于某种故障(异常,语法错误)而没有退出,并且脚本由于sys.exit()或而没有退出os._exit(),那么Python如何找出要退出的退出代码?
它似乎是0,这很有意义,因为它表示* nix系统上没有错误。但是,是否总是以0退出(上述情况除外)?令人惊讶的是,经过大量的在线搜索之后,除非另有说明,否则我找不到任何明确表示它将以0退出的内容。
在这里快速提问。
当我运行Python脚本(Py 3.7.2)时,我得到了以下代码:
Process finished with exit code -1
通常,我希望如此exit code 0,但是为什么会这样-1呢?
亲切的问候
更新!我添加了一些代码,以使您深入了解我的问题。
import numpy as np
import matplotlib.pyplot as plt
from lmfit import Model
def read_datafile(file_name):
data = np.loadtxt(file_name, delimiter=' ')
return data
def decomposition2(x, amp, cen, sig, e):
return float(amp) * (1 + float(e) * (x - float(cen))) / (pow((x - float(cen)), 2) + pow((float(sig) / 2), 2))
for r in range(20, 91, 1):
dataread = np.loadtxt("S:/Data/Model4/Mod{}.csv".format(r), delimiter=' ',
unpack=True)
x = dataread[0,] …Run Code Online (Sandbox Code Playgroud) exit-code ×10
bash ×2
java ×2
.net ×1
.net-4.5 ×1
ant ×1
bash-trap ×1
batch-file ×1
exception ×1
exit ×1
exitstatus ×1
perl ×1
process ×1
pycharm ×1
python ×1
python-3.x ×1
qt ×1
return-code ×1
runtime.exec ×1
sbt ×1
service ×1
status ×1
unix ×1
windows ×1
wpf ×1