Call the function now logwrap_fork_execvp() and fix const correctness
issues, so no longer do callers need to const_cast<> their args.
Test: logwrapper still works
Change-Id: Iea34f5cae90a06a37d395bf9a91e01fb38c35fa6
Opening child_ptty before fork() means that the parent process will
use child_ptty as the controlling terminal if it doesn't already have
one. This is a problem, because when the parent_ptty closes, SIGHUP
will be sent to the parent process, since its controlling terminal has
closed.
It's better to have the child process start its own session and then
open child_ptty as its controlling terminal. In this case, the child
process will get SIGHUP if the parent process exits, but the parent
process avoids the original issue.
There is a concern that the child_ptty will never be opened and
POLLHUP will never be generated, but there is a work-around in place
with a timeout to handle that extremely rare situation.
Secondly, remove the ignore_int_quit logic. It is described to
totally ignore these signals, similar to `nohup` which should be
preferred. However, it regressed shortly after being introduced in
2013 and serves essentially no purpose currently.
Thirdly, add a forward_signals option that does what we should have
done the whole time with signals: it forwards SIGHUP, SIGQUIT, and
SIGINT to the child process and let that process handle them. This
only needs to be enabled in the `logwrapper` case itself. Other
processes should not need to change any signals. This fixes case 3)
below.
Lastly, add O_CLOEXEC where appropriate.
Test: launch process as `adb shell logwrapper yes`
1) The both processes exit when given SIGINT
2) The process prints when abbreviated is not enabled
3) The process does print when abbreviated is enabled;
this was previously broken
Test: launch process as `adb shell` then `logwrapper yes`
4) The both processes exit when given SIGINT
5) The process prints if abbreviated is enabled or not.
6) Ctrl-c then Ctrl-c again rapidly and observe that the
logwrapper process is terminated by the second Ctrl-c.
Test: simulate a failure in child() before opening child_tty and
observe logwrapper and the child exiting appropriately.
Change-Id: Ia76cd17e16535500170d8f5e2183b3bbbf843df7
Should make it easier to switch callers over to posix_spawn once
that's available.
NOTE: The (now) unused arguments will be removed in a followup (multi-project)c
hange once we empirically confirm that there aren't any prebuilt blobs
using this function. I did readelf all currently checked in prebuilts to look
for a reference to this method, but one can never be too paranoid.
Test: make checkbuild
Change-Id: I454d80c52f269c31846133cc54375decd702fe71
The log_target parameter of android_fork_execvp_ext() is now a
bit field, and multiple targets can be set to log to multiple
places at the same time.
The new target LOG_FILE will log to a file specified by the new
parameter file_path.
Set LOG_FILE and log to a file in /dev (the only writable filesystem
avilable when e2fsck runs) when invoking e2fsck in fs_mgr.
Bug: 10021342
Change-Id: I63baf644cc8c3afccc8345df27a74203b44d0400
Also add ability to do abbreviated logging where only the first
4K bytes and last 4K bytes of output are added to the desginated log.
Also update standalog logwrapper command to support the new options.
Change-Id: Ia49cbe58479b9f9ed077498d6852e20b21287bad
When passing a NULL status to android_fork_execvp the return
status will now be the return value of the child if it exited
properly, otherwise a non-0 value will be returned.
Change-Id: I13309c61b37b6b3f9d5507f7d6484e7b6baaf8d0
- Wait for the child to exit before propagating SIGINT and SIGQUIT
to the parent
- Add ignore_int_quit argument to logwrap() that gives the caller the
option to ignore SIGINT and SIGQUIT while logwrap is running
Change-Id: If5c96cf23094917211310f00aa6aed515f110f5b
Sometimes the read on the PTY can wait indefinitely if the child
dies. By using a poll statement that monitors both the output
of the child and its state we prevent this from happening.
Change-Id: I51d5556c66f039bca673145ca72db262977e1689
Abstracting the functionality of logwrapper into a library and making
use of it for the logwrapper executable.
Change-Id: I2bcf722413f3a8454c6f52137dec86c4477fb8b5