Press "Enter" to skip to content


今天有人在微博上问了一个问题, 使用:

string exec ( string $command [, array &$output [, int &$return_var ]] )

调用一个程序, 程序退出-1, 但是PHP得到的为什么是255?
这个问题简单的说, 是因为exit或者main函数中的return, 只能使用0~255之间的值. -1 的unsigned值就是255.
我们知道, 在Shell中, 运行一个命令, 一个程序, 都是fork一个子进程(然后exec)来执行的, 而这个程序的退出码, 被Shell(父进程), 通过wait来收集而后报告给我们的.

pid_t wait(int *statloc);

而对于wait来说, 历史上原因, 他将通过statloc返回一个16bit的interge(现在也有用32位表示的, 但是会兼容已有的设计). 这16bits的interge中, 高8位就是程序退出的值(exit, 或者return), 而低八位表示导致这个程序退出的信号(其中一位表示是否有Core文件产生), 如果程序是正常退出, 那么低八位为0[1].
所以, 如果我们返回-1, 并且因为我们是正常退出, 所以Shell通过wait收集到的子进程退出状态是:

11111111 00000000

而高八位作为unsigned, 就是255了.
另外, 补充一下, 在Linux的内建Shell命令中, 很多都会遵守一个退出状态码的约定, 具体的值对应的意思[2]:

Exit Code Number Meaning Example Comments
1 Catchall for general errors let "var1 = 1/0" Miscellaneous errors, such as "divide by zero" and other impermissible operations
2 Misuse of shell builtins (according to Bash documentation) empty_function() {} Seldom seen, usually defaults to exit code 1
126 Command invoked cannot execute Permission problem or command is not an executable
127 "command not found" illegal_command Possible problem with $PATH or a typo
128 Invalid argument to exit exit 3.14159 exit takes only integer args in the range 0 - 255 (see first footnote)
128+n Fatal error signal "n" kill -9 $PPID of script $? returns 137 (128 + 9)
130 Script terminated by Control-C Control-C is fatal error signal 2, (130 = 128 + 2, see above)
255* Exit status out of range exit -1 exit takes only integer args in the range 0 - 255


  1. Bigo88
    Bigo88 April 30, 2023

    Bigo88 merupakan situs terpercaya yang ada di indonesia dan telah dipercaya oleh ratusan bahkan ribuan pemain yang memainkan permainan slot maupun judi online di indonesia.

  2. Kudabet
    Kudabet April 30, 2023

    KUDABET merupakan situs Agen Bola Piala Dunia Terpercaya Dengan uang asli yang telah terjamin kemenangannya, selain itu sangat banyak keuntungan yang bisa Anda dapatkan hanya dengan bermain dari satu user ID saja.

  3. Jane Doe
    Jane Doe September 4, 2022


  4. Falcon
    Falcon July 27, 2016

    可以的,这很鸟哥! 解释的很清楚

  5. Nonton film online Gratis
    Nonton film online Gratis October 13, 2015

    I’ve been exploring for a little for any
    high-quality articles or weblog posts in this
    kind of house . Explorring in Yahoo I eventually stumbled upon this
    website. Studying this info So i’m glad too express that I have a very excellent uncanny eeling I found out exacgly what I needed.
    I most indisputably will make ceretain to don?t put out of your mind this website
    and give it a glance regularly.

  6. 膜拜
    膜拜 July 28, 2012


  7. deven
    deven April 12, 2012


  8. Lukin
    Lukin March 15, 2012


  9. ooxx
    ooxx February 3, 2012


  10. 唐僧
    唐僧 February 2, 2012


Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.