|
From: | Martin d Anjou |
Subject: | Re: how to get make to terminate itself at the first error? |
Date: | Tue, 3 Feb 2009 08:29:44 -0500 (EST) |
User-agent: | Alpine 1.10 (LNX 962 2008-03-14) |
// job.c inside reap_children() near line 500: if (err && block) { static int printed = 0; fflush (stdout); if (!printed) { error (NILF, _("*** Waiting for unfinished jobs....")); fatal_error_signal(SIGTERM); } printed = 1; }However, looking more closely at fatal_error_signal() it appears that if you send it SIGTERM it WILL try to kill every existing child process by
SIGTERM works better, although looking at the code in command.c I am not sure why.
Now, I am getting different result depending on what the commands for the target are.
When the target is like this, ps -ef reveals that "sleep 60" keeps running, eventhough the prompt returns right away:
# CASE 1 all: t1 t2 t1: sleep 60 && echo t2: exit 1 But when the target is like this, "sleep 60" dies for good: # CASE 2 all: t1 t2 t1: sleep 60 t2: exit 1 Now if I use process substitution with the CASE 1 makefile t=$(make -j 2)the assignment does not return until the sleep 60 is over, but if I ^C out of it, "sleep 60" dies immediately.
So sending SIGTERM is not quite like hitting ^C. I'd really like to understand the difference and get it to work like ^C.
Martin
[Prev in Thread] | Current Thread | [Next in Thread] |