Thread overview
[Issue 16502] spawnProcess does not throw on exec errors
Sep 17, 2016
b2.temp@gmx.com
Sep 17, 2016
Roman
Dec 27, 2016
greenify
Dec 27, 2016
Roman
Jun 25, 2017
Roman
Jun 25, 2017
Roman
September 17, 2016
https://issues.dlang.org/show_bug.cgi?id=16502

--- Comment #1 from b2.temp@gmx.com ---
Why should it ?

You can check the exit status, read stderr if your process is piped and throw if you like. As example can you give any language whose the process methods, as implemented in their standard libraries, throw ?

--
September 17, 2016
https://issues.dlang.org/show_bug.cgi?id=16502

--- Comment #2 from Roman <freeslave93@gmail.com> ---
(In reply to b2.temp from comment #1)
> Why should it ?
> 
> You can check the exit status, read stderr if your process is piped and throw if you like. As example can you give any language whose the process methods, as implemented in their standard libraries, throw ?

The example is right in the std.process: spawnProcess throws if file is not executable or working directory does not exist.

Reading stderr and exit status is different from handling the situation where process could not start at all.

--
December 27, 2016
https://issues.dlang.org/show_bug.cgi?id=16502

greenify <greeenify@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |greeenify@gmail.com

--- Comment #3 from greenify <greeenify@gmail.com> ---
So when I execute the program it prints:

> spawnProcess(): Failed to execute program: Exec format error

from here:

https://github.com/dlang/phobos/blob/3f8298e8531b36dd12420af7ce868e5b2f156f27/std/process.d#L504

If I understand you correctly you want to catch this C API error? This seems me a very valid enhancement request.

> Error reporting can be implemented via pipe.

Hmm do you know how much overhead this would cost?
(introducing something that increases the cost vs. C API always needs a very
good justification)

--
December 27, 2016
https://issues.dlang.org/show_bug.cgi?id=16502

--- Comment #4 from Roman <freeslave93@gmail.com> ---
(In reply to greenify from comment #3)
> So when I execute the program it prints:
> 
> > spawnProcess(): Failed to execute program: Exec format error
> 
> from here:
> 
> https://github.com/dlang/phobos/blob/ 3f8298e8531b36dd12420af7ce868e5b2f156f27/std/process.d#L504
> 
> If I understand you correctly you want to catch this C API error? This seems me a very valid enhancement request.
> 
> > Error reporting can be implemented via pipe.
> 
> Hmm do you know how much overhead this would cost?
> (introducing something that increases the cost vs. C API always needs a very
> good justification)

It prints error, but does not throw exception. Also it obviously will print nothing if stderr was redirected to /dev/null.

I'm not sure about overhead. I just saw similar method in Qt QProcess code.

But what I'm sure about is that this error should be propagated to user right way (which for D is throwing the exception).

--
June 25, 2017
https://issues.dlang.org/show_bug.cgi?id=16502

--- Comment #5 from Roman <freeslave93@gmail.com> ---
Fixed in https://github.com/dlang/phobos/pull/5431

--
June 25, 2017
https://issues.dlang.org/show_bug.cgi?id=16502

Roman <freeslave93@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |FIXED

--
June 25, 2017
https://issues.dlang.org/show_bug.cgi?id=16502

greensunny12@gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |greensunny12@gmail.com

--- Comment #6 from greensunny12@gmail.com ---
> Fixed in https://github.com/dlang/phobos/pull/5431


@Roman: If you reference the Bugzilla issue(s) in your PRs, they will be
automatically closed & you don't need to keep track of them manually ;-)

https://github.com/dlang-bots/dlang-bot#automated-references

There are other advantages of doing this as well, e.g. referenced issues will be listed on the changelog.

--