entry: foreground and background proc

This commit is contained in:
Thomas Bishop 2025-12-12 19:08:01 +00:00
parent 017dba7713
commit 0766a6cfec

View file

@ -0,0 +1,105 @@
---
tags:
- Linux
---
## Use `&` to send a process to background
Here is a dummy [process](./Processes.md):
```sh
bash -c 'while sleep 5; do echo "Still running... $(date +%T)"; done'
```
If I run this normally, it will continue to print every 5 seconds and I can't
use the terminal.
If I append `&` it will run in the background:
```sh
bash -c 'while sleep 5; do echo "Still running... $(date +%T)"; done' &
# [1] 13134
```
It prints the job number (`[1]`) and the PID of the process.
Now `stdout` will continue to interrupt every 5 seconds but I can do other
things in the foreground, e.g:
```
~ bash -c 'while sleep 5; do echo "Still running... $(date +%T)"; done' &
[2] 13505
➜ ~ Still running... 18:20:42
echo 'i can still use terminal'
i can still use terminal
➜ ~ Still running... 18:20:47
Still running... 18:20:47
```
> Notice now I have two processes running (the same print script, twice), so the
> job number has incremented to `[2]`
## Bring a background process back to the foreground
Use `%<job-number>` or `%<pid` to bring a process back to the foreground:
```sh
fg %1
# [1] - 13134 running bash -c 'while sleep 5; do echo "Still running... $(date +%T)"; done'
# Still running... 18:23:22
# Still running... 18:23:22
# Still running... 18:23:27
```
Now it's back in the foreground and I cannot use the terminal:
```
Still running... 18:24:17
ls
Still running... 18:24:22
Still running... 18:24:22
```
## Pausing a job
`Ctrl+Z` does not kill the process. It _pauses_ it. This moves it to the
background and pauses its execution, returning terminal control back to you.
For example I've stopped `vim` below:
```
vim minicom.log
[1] + 14231 suspended nvim minicom.log
```
Again I'm given the job number.
For it to continue in the background:
```sh
bg %1
```
Or the foreground:
```sh
fg %1
```
(This will reopen `vim`.)
## Terminate a job
```
kill %1
```
## View jobs with `jobs`
```
jobs
[1] + suspended nvim minicom.log
[2] - running bash -c 'while sleep 5; do echo "Still running... $(date +%T)"; done'
```