diff options
| author | C. McEnroe | 2020-02-08 17:22:51 -0500 | 
|---|---|---|
| committer | C. McEnroe | 2020-02-08 17:22:51 -0500 | 
| commit | 8128edc7eb1e7a86e82d5936ec1100e1f9912f54 (patch) | |
| tree | 71092d53dfeba8ed6e4330705b4f0b9abee68180 | |
| parent | 72d8749454820cf025f05a8ab9cc1cff4c8c5b6e (diff) | |
Handle SIGCHLD
| -rw-r--r-- | chat.c | 22 | 
1 files changed, 22 insertions, 0 deletions
| @@ -22,6 +22,8 @@  #include <stdbool.h>  #include <stdio.h>  #include <stdlib.h> +#include <string.h> +#include <sys/wait.h>  #include <sysexits.h>  #include <unistd.h> @@ -141,6 +143,7 @@ int main(int argc, char *argv[]) {  	signal(SIGHUP, signalHandler);  	signal(SIGINT, signalHandler);  	signal(SIGTERM, signalHandler); +	signal(SIGCHLD, signalHandler);  	sig_t cursesWinch = signal(SIGWINCH, signalHandler);  	struct pollfd fds[2] = { @@ -155,6 +158,25 @@ int main(int argc, char *argv[]) {  		if (signals[SIGHUP]) self.quit = "zzz";  		if (signals[SIGINT] || signals[SIGTERM]) break; + +		if (signals[SIGCHLD]) { +			int status; +			while (0 < waitpid(-1, &status, WNOHANG)) { +				if (WIFEXITED(status) && WEXITSTATUS(status)) { +					uiFormat( +						Network, Warm, NULL, +						"Process exits with status %d", WEXITSTATUS(status) +					); +				} else if (WIFSIGNALED(status)) { +					uiFormat( +						Network, Warm, NULL, +						"Process terminates from %s", +						strsignal(WTERMSIG(status)) +					); +				} +			} +		} +  		if (signals[SIGWINCH]) {  			signals[SIGWINCH] = 0;  			cursesWinch(SIGWINCH); | 
