/* jobs.h -- structures and definitions used by the jobs.c file. */
-/* Copyright (C) 1993-2009 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2015 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
char *command; /* The particular program that is running. */
} PROCESS;
+struct pipeline_saver {
+ struct process *pipeline;
+ struct pipeline_saver *next;
+};
+
/* PALIVE really means `not exited' */
#define PSTOPPED(p) (WIFSTOPPED((p)->status))
#define PRUNNING(p) ((p)->running == PS_RUNNING)
JOB *j_lastasync; /* last async job allocated by stop_pipeline */
};
+/* Revised to accommodate new hash table bgpids implementation. */
+typedef pid_t ps_index_t;
+
struct pidstat {
- struct pidstat *next;
- pid_t pid;
- int status;
+ ps_index_t bucket_next;
+ ps_index_t bucket_prev;
+
+ pid_t pid;
+ bits16_t status; /* only 8 bits really needed */
};
struct bgpids {
- struct pidstat *list;
- struct pidstat *end;
+ struct pidstat *storage; /* storage arena */
+
+ ps_index_t head;
+ ps_index_t nalloc;
+
int npid;
};
+#define NO_PIDSTAT (ps_index_t)-1
+
#define NO_JOB -1 /* An impossible job array index. */
#define DUP_JOB -2 /* A possible return value for get_job_spec (). */
#define BAD_JOBSPEC -3 /* Bad syntax for job spec. */
/* A value which cannot be a process ID. */
#define NO_PID (pid_t)-1
+#define ANY_PID (pid_t)-1
+
/* System calls. */
#if !defined (HAVE_UNISTD_H)
extern pid_t fork (), getpid (), getpgrp ();
extern struct jobstats js;
extern pid_t original_pgrp, shell_pgrp, pipeline_pgrp;
-extern pid_t last_made_pid, last_asynchronous_pid;
+extern volatile pid_t last_made_pid, last_asynchronous_pid;
extern int asynchronous_notification;
extern JOB **jobs;
extern void making_children __P((void));
extern void stop_making_children __P((void));
extern void cleanup_the_pipeline __P((void));
+extern void discard_last_procsub_child __P((void));
extern void save_pipeline __P((int));
-extern void restore_pipeline __P((int));
+extern PROCESS *restore_pipeline __P((int));
extern void start_pipeline __P((void));
extern int stop_pipeline __P((int, COMMAND *));
+extern int discard_pipeline __P((PROCESS *));
+extern void append_process __P((char *, pid_t, int, int));
extern void delete_job __P((int, int));
extern void nohup_job __P((int));
extern int get_tty_state __P((void));
extern int set_tty_state __P((void));
-extern int wait_for_single_pid __P((pid_t));
+extern int job_exit_status __P((int));
+extern int job_exit_signal __P((int));
+
+extern int wait_for_single_pid __P((pid_t, int));
extern void wait_for_background_pids __P((void));
extern int wait_for __P((pid_t));
extern int wait_for_job __P((int));
+extern int wait_for_any_job __P((void));
+
+extern void wait_sigint_cleanup __P((void));
extern void notify_and_cleanup __P((void));
extern void reap_dead_jobs __P((void));
extern void run_sigchld_trap __P((int));
+extern int freeze_jobs_list __P((void));
extern void unfreeze_jobs_list __P((void));
extern int set_job_control __P((int));
extern void without_job_control __P((void));
extern void set_sigchld_handler __P((void));
extern void ignore_tty_job_signals __P((void));
extern void default_tty_job_signals __P((void));
+extern void get_original_tty_job_signals __P((void));
extern void init_job_stats __P((void));
extern void save_pgrp_pipe __P((int *, int));
extern void restore_pgrp_pipe __P((int *));
-#if defined (JOB_CONTROL)
-extern int job_control;
-#endif
+extern void set_maxchild __P((int));
+
+extern int job_control; /* set to 0 in nojobs.c */
#endif /* _JOBS_H_ */