瀏覽代碼

fix exit handling

Jan Klemkow 6 年之前
父節點
當前提交
2a2a2b48c8
共有 1 個文件被更改,包括 9 次插入4 次删除
  1. 9 4
      scroll.c

+ 9 - 4
scroll.c

@@ -75,12 +75,14 @@ die(const char *fmt, ...)
 void
 sigchld(int sig)
 {
+	pid_t pid;
+	int status;
+
 	assert(sig == SIGCHLD);
 
-	pid_t pid;
-	while ((pid = waitpid(-1, NULL, WNOHANG)) > 0)
+	while ((pid = waitpid(-1, &status, WNOHANG)) > 0)
 		if (pid == child)
-			die("child died");
+			exit(status);
 }
 
 void
@@ -250,8 +252,11 @@ main(int argc, char *argv[])
 				die("write:");
 		}
 		if (FD_ISSET(mfd, &rd)) {
-			if (read(mfd, &c, 1) <= 0 && errno != EINTR)
+			ssize_t n = read(mfd, &c, 1);
+			if (n == -1 && errno != EINTR)
 				die("read:");
+			if (n == 0)
+				return 0;
 			buf[pos++] = c;
 			if (pos == size) {
 				size *= 2;