diff options
Diffstat (limited to 'reference/C/CONTRIB/OR_USING_C/10.4.c')
-rw-r--r-- | reference/C/CONTRIB/OR_USING_C/10.4.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/OR_USING_C/10.4.c b/reference/C/CONTRIB/OR_USING_C/10.4.c new file mode 100644 index 0000000..48cbdc7 --- /dev/null +++ b/reference/C/CONTRIB/OR_USING_C/10.4.c @@ -0,0 +1,32 @@ +#include <signal.h> +#include <sys/ioctl.h> +#include "10.h" + +fg(j) +JOB *j; +{ + /* + * If the terminal is not in the job's process + * group, change the process group of the + * terminal. + */ + if (j->pgrp != TermPgrp) { + ioctl(1, TIOCSPGRP, &j->pgrp); + TermPgrp = j->pgrp; + } + + /* + * If the job is not running, start it up. + */ + if (j->status & JSTOPPED) { + killpg(j->pgrp, SIGCONT); + j->status &= ~JSTOPPED; + j->status |= JRUNNING; + } + + /* + * Go wait for the job to complete. + */ + waitfor(); +} + |