mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-01-05 01:55:21 +03:00
Shell: Do not bail early when printing jobs if waitpid() fails
This fixes running `jobs` in a child process. Also makes sure that stdout is flushed when writing jobs out.
This commit is contained in:
parent
a935a31ecf
commit
a46318d414
Notes:
sideshowbarker
2024-07-19 01:39:56 +09:00
Author: https://github.com/alimpfard Commit: https://github.com/SerenityOS/serenity/commit/a46318d414a Pull-request: https://github.com/SerenityOS/serenity/pull/3858
@ -37,13 +37,9 @@ bool Job::print_status(PrintStatusMode mode)
|
||||
{
|
||||
int wstatus;
|
||||
auto rc = waitpid(m_pid, &wstatus, WNOHANG);
|
||||
if (rc == -1) {
|
||||
perror("waitpid");
|
||||
return false;
|
||||
}
|
||||
auto status = "running";
|
||||
|
||||
if (rc != 0) {
|
||||
if (rc > 0) {
|
||||
if (WIFEXITED(wstatus))
|
||||
status = "exited";
|
||||
|
||||
@ -52,6 +48,15 @@ bool Job::print_status(PrintStatusMode mode)
|
||||
|
||||
if (WIFSIGNALED(wstatus))
|
||||
status = "signaled";
|
||||
} else if (rc < 0) {
|
||||
// We couldn't waitpid() it, probably because we're not the parent shell.
|
||||
// just use the old information.
|
||||
if (exited())
|
||||
status = "exited";
|
||||
else if (m_is_suspended)
|
||||
status = "stopped";
|
||||
else if (signaled())
|
||||
status = "signaled";
|
||||
}
|
||||
|
||||
char background_indicator = '-';
|
||||
@ -72,6 +77,7 @@ bool Job::print_status(PrintStatusMode mode)
|
||||
outln("[{}] {} {} {} {} {}", m_job_id, background_indicator, m_pid, m_pgid, status, command);
|
||||
break;
|
||||
}
|
||||
fflush(stdout);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user