-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Expand the scope of std::process #941
Comments
This module is now superseded by the `std::process` module. This module still has some room to expand to get quite back up to parity with the `old_io` version, and there is a [tracking issue][issue] for feature requests as well as known room for expansion. [issue]: rust-lang/rfcs#941 [breaking-change]
…turon This module is now superseded by the `std::process` module. This module still has some room to expand to get quite back up to parity with the `old_io` version, and there is a [tracking issue][issue] for feature requests as well as known room for expansion. [issue]: rust-lang/rfcs#941 [breaking-change]
|
Certainly, I consider that to fall under the "It is not possible to specify a custom I/O handle as one of the stdio descriptors" umbrella where we're not really leaking them per-se but you should be able to specify that an existing file descriptor should exist as another in the new process. |
A post-fork function (cf. #579 (comment)) seems to need properties similar to |
Need to add a way to wait for children with a timeout. |
I need a way to check whether a child process is still running or not. |
Is there any plan to re-add cc @aturon |
Add a new method `CommandExt::session_leader(&mut self, on: bool)` to create a new session (cf. `setsid(2)`) for the child process. This means that the child is the leader of a new process group. The parent process remains the child reaper of the new process. This is not enough to create a daemon process. The *init* process should be the child reaper of a daemon. This can be achieved if the parent process exit. Moreover, a daemon should not have a controlling terminal. To acheive this, a session leader (the child) must spawn another process (the daemon) in the same session. cc rust-lang/rfcs#941 cc #17176
Hi, I think this is the relevant RFC, just let me know if it isn't and I'll remove my comment and file elsewhere. About 1 year ago, I had a nice piece of code[0], which let me run a subprocess and provide streaming updates of its stdout/stderr descriptors. It is code which is intended for a long-running system: e.g., commands that run for hours and the controlling job needs to respond rather than block. Right now, Process::Command & family do not appear to support this ability. I think with certain abuses of the borrow checker, I can kludge my way to part of this, but it's a lot of fiddly work when really, the original API supported what I need. I'd like to see functionality in std::process explicitly for this case. [0] https://gist.github.com/pnathan/30e283cbcf2bf4f46346#file-action-lib-rs-L134 |
@pnathan I only briefly scanned your code, but why exactly can't you just read from the |
@pnathan I agree with @BurntSushi that what you did previously should definitely be possible with today's |
@alexcrichton @BurntSushi - hmm. Maybe I got into a corner with reading from the pipes, certainly has happened before. However, I still don't see any way in the API to check if a process is dead, only |
We could pretty easily add a nonblocking version of wait but I don't think we do right now. |
@pnathan yeah there's not currently a way to do that, but that's largely because it's quite tricky! On Unix unfortunately In the meantime though so long as you're careful with calling wait you can use this repo in the meantime which should allow you to wait with a timeout of 0. |
On Linux, the PID is only recycled if the parent waits for the child exit code, otherwise it is transform into a zombie process. |
Ah right of course! |
Another one for the list above- It is not possible to specify a custom I/O handle as one of the NON-stdio descriptors (extra_io) |
cc #1359, an RFC to add a few extra pieces of functionality on Unix |
What about process groups or child processes of some |
With Linux, it'd be good to expose the |
With #1359 now implemented in rust-lang/rust#31409 (and tracked for stabilization by rust-lang/rust#31398) this issue should now basically be entirely possible using libstd itself. The original motivation has basically now been fulfilled, so I'm going to close this. There are perhaps some more specific APIs which could be added or bound, but those likely want to have separate issues or start out as crates on crates.io. |
👍 |
Like #939, this issue is intended to collect information about the expansion of the
std::process
module. As with most of the rest of the I/O reform, the goal ofstd::process
was originally to be quite conservative. Over time we knew we were going to want to expand the module after we got experience using it as well as seeing how this sort of expansion plays out in the bigger picture.I'll list some pieces below of parts I think that could be expanded, and I'll try to keep the list updated over time:
As with #939 I don't plan on writing an RFC about this expansion in the near future, but I'd like one place to collect information about how
std::process
can be expanded.The text was updated successfully, but these errors were encountered: