Job
Job *j;
static Job *job_list; /* job list */
static Job *last_job;
static Job *async_job;
check_job(Job *j)
j_print(Job *j, int how, struct shf *shf)
static void j_set_async(Job *);
static void j_startjob(Job *);
static int j_waitj(Job *, int, const char *);
static void j_print(Job *, int, struct shf *);
static Job *j_lookup(const char *, int *);
static Job *new_job(void);
static Job *
Job *j, *last_match;
static void check_job(Job *);
static void put_job(Job *, int);
static void remove_job(Job *, const char *);
static int kill_job(Job *, int);
static Job *free_jobs;
static Job *
Job *newj, *j;
newj = alloc(sizeof(Job), APERM);
remove_job(Job *j, const char *where)
Job **prev, *curr;
put_job(Job *j, int where)
Job **prev, *curr;
kill_job(Job *j, int sig)
Job *j;
Job *j;
Job *j;
Job *j;
Job *j;
Job *j;
Job *next; /* next job in list */
Job *j;
Job *j;
Job *j, *tmp;
Job *j, *tmp;
j_set_async(Job *j)
Job *jl, *oldest;
j_startjob(Job *j)
j_waitj(Job *j,
job_attach_node(Job *job, GNode *node)
handle_job_status(Job *job, int status)
do_run_command(Job *job, const char *pre)
job_run_next(Job *job)
extern void job_attach_node(Job *, GNode *);
extern bool job_run_next(Job *);
extern void handle_job_status(Job *, int);
Job *runningJobs; /* Jobs currently running a process */
Job *errorJobs; /* Jobs in error at end */
Job *availableJobs; /* Pool of available jobs */
static Job *heldJobs; /* Jobs not running yet because of expensive */
static Job *extra_job; /* Needed for .INTERRUPT */
static void postprocess_job(Job *);
static void determine_job_next_step(Job *);
static void may_continue_job(Job *);
static Job *reap_finished_job(pid_t);
static bool expensive_job(Job *);
static const char *really_kill(Job *, int);
static void may_remove_target(Job *);
static void print_error(Job *);
really_kill(Job *job, int signo)
may_remove_target(Job *j)
quick_error(Job *j, int signo, bool first)
print_error(Job *j)
Job *j, *k, *jnext;
Job *j, *k, *jnext;
Job *job;
postprocess_job(Job *job)
determine_expensive_job(Job *job)
expensive_job(Job *job)
may_continue_job(Job *job)
Job *job = heldJobs;
Job *job = availableJobs;
determine_job_next_step(Job *job)
static Job *
Job **j, *job;
Job *job;
Job *j;
j = ereallocarray(NULL, sizeof(Job), maxJobs+1);
Job *job;
Job *job; /* the job descriptor in that element */
extern void determine_expensive_job(Job *);
extern Job *runningJobs, *errorJobs, *availableJobs;