如果是,在哪个操作系统,shell或其他什么?
考虑下面的java程序(我只是以java为例,任何语言对这个问题都有好处,更多的是关于操作系统):
public class ExitCode {
public static void main(String args[]) {
System.exit(Integer.parseInt(args[0]));
}
}
Run Code Online (Sandbox Code Playgroud)
在Linux和bash上运行它,它总是返回不等于255的值,例如(echo $?打印上一个执行命令的退出代码)
> java ExitCode 2; echo $?
2
> java ExitCode 128; echo $?
128
> java ExitCode 255; echo $?
255
> java ExitCode 256; echo $?
0
> java ExitCode 65536; echo $?
0
Run Code Online (Sandbox Code Playgroud)
编辑:下面的(只有,到目前为止)答案完全解释了在UNIX上发生的事情.我仍然想知道其他操作系统.
我有一个C程序,它返回一个整数值.我很惊讶地发现,当从shell提示符检查返回值时,我得到的值为模数256.
/* prog.c */
int main(...) { return 257; }
Run Code Online (Sandbox Code Playgroud)
-
> ./prog.e
> echo $?
1
Run Code Online (Sandbox Code Playgroud)
我试过这些命令.
~$top
(ctrl + z)stopped the process
~$echo $?
147
~$top
(ctrl + c)killed the process
~$echo $?
0
Run Code Online (Sandbox Code Playgroud)
这里发生了什么,请解释一下,为什么它显示出一些恒定的价值.这些价值观的含义是什么?
#include <stdio.h>
int main() {
while (height > 0) {
if (throttle >= 0 && throttle <= 100) {
printf("%d %.1f %.1f %.1f ", time, height, velocity, fuel);
scanf("%d", &throttle);
height = heightTemp + velocityTemp - (throttle * K-G) / 2;
velocity = velocityTemp + (throttle * K-G);
fuel = fuelTemp - throttle;
time = time + 1;
heightTemp = height;
velocityTemp = velocity;
fuelTemp = fuel;
}
else {
printf("Please choose a number between 0 and 100! \n");
break; …Run Code Online (Sandbox Code Playgroud) 最近,在读一本关于linux编程的书时,我收到一条消息:
给出_exit()的status参数定义了进程的终止状态,当调用wait()时,该进程的父进程可以使用该进程.虽然定义为int,但实际上只有父8的状态的底部8位可用.并且只
0 ~ 127推荐使用,因为128~255由于某些原因可能会混淆shell.由于这-1将成为2552的补充.
以上是关于子进程的退出状态.
我的问题是:
0 ~ 127?因为我确实使用-1返回值来表示错误,所以我今后应该更正.更新 - 通过wait()/ waitpid()获取状态:
我在书中阅读了更多的chps(TLPI),发现在返回状态和wait()/ waitpid()中有更多技巧值得一提,我应该在提出问题之前阅读更多的chps.无论如何,我自己添加一个答案来描述它,以防将来可能对某人有所帮助.
请注意,我正在运行一台Linux机器,虽然我不认为Windows(或其他)机器上的结果有所不同.
这是一个简单的问题 - C++程序通常返回32位int.如果我return -1,然后从终端打印结果,结果是255.
为什么是这样?我觉得链接这是我应该知道的,或者应该在很多年前注意到的事情 - 我以前从未真正使用过返回代码或以前想过它.
测试C++程序:
int main()
{
return -1;
}
Run Code Online (Sandbox Code Playgroud)
编译:
g++ main.cpp -o a.out
Run Code Online (Sandbox Code Playgroud)
跑:
./a.out
Run Code Online (Sandbox Code Playgroud)
检查结果:
echo $?
Run Code Online (Sandbox Code Playgroud)
结果:
255
Run Code Online (Sandbox Code Playgroud)
我本以期待看到2 ^ 32 - 1.
为什么结果255不是-1甚至是4294967295.(2^32 - 1)
这是一个简单的程序:
int main() {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
退出代码是0.
如果我写:
int main() {
return 700;
}
Run Code Online (Sandbox Code Playgroud)
退出代码是188.
为什么188不是700退出代码在这里?
我已经在Xcode 10.0(clang:Apple LLVM版本10.0.0)中的macOS上编译并执行了这段代码,它正在返回255.另一方面,在Visual Studio Community Edition v.15.8.6中的Windows上,它正在返回-1.有人可以在macOS上解释这种行为吗?代码如下.
int main() {
return -1;
}
Run Code Online (Sandbox Code Playgroud)