interrupt = Targ_FindNode(".INTERRUPT", NULL, TARG_NOCREATE);
interrupt = Targ_FindNode(".INTERRUPT", TARG_NOCREATE);
JobInterrupt(runINTERRUPT, signo)    int     runINTERRUPT;	/* Non-zero if commands for the .INTERRUPT				 * target should be executed */    int     signo;		/* signal received */{    LstNode	  ln;		/* element in job table */    Job 	  *job; 	/* job descriptor in that element */    GNode	  *interrupt;	/* the node describing the .INTERRUPT target */    aborting = ABORT_INTERRUPT;    for (ln = Lst_First(&jobs); ln != NULL; ln = Lst_Adv(ln)) {	job = (Job *)Lst_Datum(ln);	if (!Targ_Precious(job->node)) {	    const char	*file = job->node->path == NULL ?				 job->node->name :				 job->node->path;	    if (!noExecute && eunlink(file) != -1) {		Error("*** %s removed", file);	    }	}#ifdef RMT_WANTS_SIGNALS	if (job->flags & JOB_REMOTE) {	    /*	     * If job is remote, let the Rmt module do the killing.	     */	    if (!Rmt_Signal(job, signo)) {		/*		 * If couldn't kill the thing, finish it out now with an		 * error code, since no exit report will come in likely.		 */		int status;		status.w_status = 0;		status.w_retcode = 1;		JobFinish(job, &status);	    }	} else if (job->pid) {	    KILL(job->pid, signo);	}#else	if (job->pid) {	    if (DEBUG(JOB)) {		(void)fprintf(stdout,			       "JobInterrupt passing signal to child %d.\n",			       job->pid);		(void)fflush(stdout);	    }	    KILL(job->pid, signo);	}#endif /* RMT_WANTS_SIGNALS */    }#ifdef REMOTE    for (ln = Lst_First(&stoppedJobs); ln != NULL; ln = Lst_Adv(ln)) {	job = (Job *)Lst_Datum(ln);	if (job->flags & JOB_RESTART) {	    if (DEBUG(JOB)) {		(void)fprintf(stdout, "%s%s",			       "JobInterrupt skipping job on stopped queue",			       "-- it was waiting to be restarted.\n");		(void)fflush(stdout);	    }	    continue;	}	if (!Targ_Precious(job->node)) {	    char	*file = job->node->path == NULL ?				 job->node->name :				 job->node->path;	    if (eunlink(file) == 0) {		Error("*** %s removed", file);	    }	}	/*	 * Resume the thing so it will take the signal.	 */	if (DEBUG(JOB)) {	    (void)fprintf(stdout,			   "JobInterrupt passing CONT to stopped child %d.\n",			   job->pid);	    (void)fflush(stdout);	}	KILL(job->pid, SIGCONT);#ifdef RMT_WANTS_SIGNALS	if (job->flags & JOB_REMOTE) {	    /*	     * If job is remote, let the Rmt module do the killing.	     */	    if (!Rmt_Signal(job, SIGINT)) {		/*		 * If couldn't kill the thing, finish it out now with an		 * error code, since no exit report will come in likely.		 */		int status;		status.w_status = 0;		status.w_retcode = 1;		JobFinish(job, &status);	    }	} else if (job->pid) {	    if (DEBUG(JOB)) {		(void)fprintf(stdout,		       "JobInterrupt passing interrupt to stopped child %d.\n",			       job->pid);		(void)fflush(stdout);	    }	    KILL(job->pid, SIGINT);	}#endif /* RMT_WANTS_SIGNALS */    }#endif    if (runINTERRUPT && !touchFlag) {	interrupt = Targ_FindNode(".INTERRUPT", NULL, TARG_NOCREATE);	if (interrupt != NULL) {	    ignoreErrors = FALSE;	    JobStart(interrupt, JOB_IGNDOTS, (Job *)0);	    while (nJobs) {		Job_CatchOutput();#ifndef RMT_WILL_WATCH		Job_CatchChildren(!usePipes);#endif /* RMT_WILL_WATCH */	    }	}    }    (void)eunlink(tfile);    exit(signo);}