相关疑难解决方法(0)

ExitCodes大于255,可能吗?

如果是,在哪个操作系统,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上发生的事情.我仍然想知道其他操作系统.

shell operating-system exit-code

32
推荐指数
2
解决办法
1万
查看次数

Linux/bash中程序返回值的有效范围是多少?

我有一个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)
  • 为什么我看不到整数?
  • 这种行为记录在哪里?
  • 如何将整个32位值获取到shell?

c bash return-value ubuntu-10.04

12
推荐指数
1
解决办法
6537
查看次数

什么是echo $?在linux终端?

我试过这些命令.

~$top
(ctrl + z)stopped the process
~$echo $?
147
~$top
(ctrl + c)killed the process
~$echo $?
0
Run Code Online (Sandbox Code Playgroud)

这里发生了什么,请解释一下,为什么它显示出一些恒定的价值.这些价值观的含义是什么?

linux

8
推荐指数
2
解决办法
3万
查看次数

中断循环,如果循环中断则不运行下一个代码

#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)

c break

8
推荐指数
2
解决办法
211
查看次数

c - 适当的返回状态/值范围

最近,在读一本关于linux编程的书时,我收到一条消息:

给出_exit()的status参数定义了进程的终止状态,当调用wait()时,该进程的父进程可以使用该进程.虽然定义为int,但实际上只有父8的状态的底部8位可用.并且只0 ~ 127推荐使用,因为128~255由于某些原因可能会混淆shell.由于这-1将成为2552的补充.

以上是关于子进程的退出状态.

我的问题是:

  • 为什么父进程只获得子进程退出状态的8位?
  • 正常功能的返回值怎么样?仅使用它是合理的还是合理的0 ~ 127?因为我确实使用-1返回值来表示错误,所以我今后应该更正.

更新 - 通过wait()/ waitpid()获取状态:

我在书中阅读了更多的chps(TLPI),发现在返回状态和wait()/ waitpid()中有更多技巧值得一提,我应该在提出问题之前阅读更多的chps.无论如何,我自己添加一个答案来描述它,以防将来可能对某人有所帮助.

c fork process return-value

6
推荐指数
1
解决办法
586
查看次数

C++程序返回int类型,为什么返回-1返回255?

请注意,我正在运行一台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)

c c++ operating-system integer return-value

4
推荐指数
2
解决办法
960
查看次数

为什么程序返回的是除我指定的退出代码?

这是一个简单的程序:

int main() {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

退出代码是0.

如果我写:

int main() {
    return 700;
}
Run Code Online (Sandbox Code Playgroud)

退出代码是188.

为什么188不是700退出代码在这里?

c exit-code

4
推荐指数
1
解决办法
145
查看次数

由main()返回的值混淆

我已经在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)

c++ macos

3
推荐指数
1
解决办法
100
查看次数