Bug 6926 – std.process.system return wrong exit code

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
phobos
Product
D
Version
D2
Platform
Other
OS
Linux
Creation time
2011-11-09T20:20:00Z
Last change time
2012-05-31T04:04:46Z
Assigned to
nobody
Creator
mihail.zenkov

Comments

Comment #0 by mihail.zenkov — 2011-11-09T20:20:36Z
std.process.system should return non-zero exit code when it stopped by ctrl+c. Simple test: import std.stdio; import std.process; void main() { int ret = system("sleep 10"); writeln("RET ", ret); }
Comment #1 by hsteoh — 2012-02-24T22:11:29Z
There are several issues here. 1) According to the current docs, std.process.system returns the value of WEXITSTATUS(status), and in this case, the value of this macro is indeed 0 (as I checked on my Linux system). 2) Which brings me to the next point: the current implementation of system() in Phobos assumes a particular definition of WEXITSTATUS. It works on Linux, but there's no guarantee it will work on other Posix systems because they may define WEXITSTATUS differently. (But I may wrong, based on a comment in glibc that essentially says the current definition is across the all known unixen, in spite of the Posix spec leaving this open to interpretation.) 3) But more importantly, should we return non-zero if the child exits via a signal? If so, we need std.process.system to check the value of WIFSIGNALED(status) and possibly WCOREDUMP(status), and return a meaningful value (maybe -1?).
Comment #2 by hsteoh — 2012-02-25T11:46:14Z
Comment #3 by github-bugzilla — 2012-05-20T14:49:54Z
Commit pushed to master at https://github.com/D-Programming-Language/phobos https://github.com/D-Programming-Language/phobos/commit/41e6decef90b2f598b2e796a73ddfa34cb668566 Merge pull request #460 from quickfur/6926-process Code cleanup & fix issue 6926