diff --git a/st.c b/st.c index d954288..7bc0807 100644 --- a/st.c +++ b/st.c @@ -1238,12 +1238,16 @@ execsh(void) { void sigchld(int a) { int stat, ret; + pid_t waitr; - if(waitpid(pid, &stat, 0) < 0) - die("Waiting for pid %hd failed: %s\n", pid, strerror(errno)); + waitr = wait(&stat); + if(waitr < 0) + die("Waiting failed: %s\n", strerror(errno)); + if(waitr != pid) + return; ret = WIFEXITED(stat) ? WEXITSTATUS(stat) : EXIT_FAILURE; - if (ret != EXIT_SUCCESS) + if(ret != EXIT_SUCCESS) die("child finished with error '%d'\n", stat); exit(EXIT_SUCCESS); }