Home
Main website
Display Sidebar
Hide Ads
Recent Changes
View Source:
JobControl
Edit
PageHistory
Diff
Info
LikePages
You are viewing an old revision of this page.
View the current version
.
In Unix you can run "jobs", suspend them, run them in the background, or bring them to the foreground. The commands for this are: ;bg ''jobid'':Moves ''jobid'' into the background ;fg ''jobid'':Moves stopped, or backgrounded ''jobid'' into the foreground ;kill %''jobid'':Send a signal to a job ;Control-Z:Suspend the currently running job ;jobs:List all current jobs. !!How this works Internally each command line (job) gets it's own ProcessGroup assigned to it by the shell when it creates the job using [setsid(2)]. While the command is running in the foreground it recieves any signals from the tty layer (such as [SIGTSTP], [SIGINT], [SIGQUIT], [SIGHUP] etc). If you press ^Z the ProcessGroup gets sent a [SIGTSTP]. If the process(es) ignore the [SIGTSTP], this is converted by the kernel into a [SIGSTOP]. When a process recieves a [SIGSTOP] it's parent (the shell) will get notified (via a [SIGCHLD]), and will mark that job as being "Stopped". When you type "fg" or "bg", then the process is started with a [SIGCONT], and in the case of fg, [tcsetpgrp(3)] is called to make that ProcessGroup the new foreground ProcessGroup. When the shell recieves a [SIGHUP] (presumably from the terminal going away), then it will send a [SIGHUP] to each job. If a job is also "Stopped" then the shell will also send it a [SIGCONT]. Depending on your shell, exiting the shell with ^D, "exit", "logout","exit 0" etc may or may not cause jobs to recieve the [SIGHUP]. The disown builtin may be used to remove a process group from the shells list of jobs, so when the shell exits it doesn't send that process a [SIGHUP].
No page links to
JobControl
.