TrumanWong

disown

Removes the job from the current shell.

Summary

disown [-h] [-ar] [jobspec ... | pid ...]

The main purpose

  • Remove all jobs from the current shell's job list.

  • Remove one or more specified jobs from the current shell's job list.

  • Removes a running job from the current shell's job list.

  • Mark jobs so that they do not end after the current shell exits.

Options

-h marks each job identifier that will not receive a sighup signal when the shell does.
-a removes all jobs.
-r removes a running job.

Parameters

jobspec (optional): The job identifier to be removed, which can be one or more.

pid (optional): The process ID corresponding to the job to be removed, which can be one or more.

return value

Returns successful unless job control is not enabled or an execution error occurs.

example

# Demo.
[user2@pc] ssh 192.168.1.4
user2@192.168.1.4's password:
# Press ctrl+z at this time to stop the interaction.
[1]+ Stopped ssh 192.168.1.4

[user2@pc] ssh 192.168.1.7
user2@192.168.1.7's password:
# Press ctrl+z at this time to stop the interaction.
[1]+ Stopped ssh 192.168.1.7

[user2@pc] sleep 120 &
[3] 28986

# List jobs and pid information.
[user2@pc] jobs -l
[1]- 28756 Stopped ssh 192.168.1.4
[2]+ 28833 Stopped ssh 192.168.1.7
[3] 28986 Running sleep 120 &

# Delete the running job.
[user2@pc] disown -r

[user2@pc] jobs -l
[1]- 28756 Stopped ssh 192.168.1.4
[2]+ 28833 Stopped ssh 192.168.1.7

# Note that disown only removes the job and does not stop it.
[user2@pc] pgrep -a -u user2 -f 'sleep 120'
28986 sleep 120

# Delete the specified job.
[user2@pc] disown %2
bash: warning: deleting stopped job 2 with process group 28833

[user2@pc] jobs -l
[1]- 28756 Stopped ssh 192.168.1.4

# Note that disown only removes the job and does not stop it.
[user2@pc] pgrep -a -u user2 -f 'ssh 192.168.1.7'
28833 ssh 192.168.1.7

# Delete all jobs.
[user2@pc] disown -a
bash: warning: deleting stopped job 1 with process group 28756

[user2@pc] jobs -l

# Note that disown only removes the job and does not stop it.
[user2@pc] pgrep -a -u user2 -f 'ssh 192.168.1.4'
28756 ssh 192.168.1.4
# Demonstrate the effect of the -h option.
[user2@pc] sleep 90 &
[1] 109080

[user2@pc] jobs -l
[1]+ 109080 Running sleep 90 &

[user2@pc] disown -h %1

[user2@pc] exit

# At this time, the previous terminal has been closed. Now open a new terminal to find the job.
[user2@pc] pgrep -a -u user2 -f 'sleep 90'
109080 sleep 90

Notice

  1. The job control commands of bash include bg fg kill wait disown suspend.
  2. This command can only be executed when the set option monitor is turned on; to view the job control status: enter set -o to view the monitor line; execute set -o monitor or set -m to turn it on this option.
  3. This command is a built-in bash command. For related help information, please see the help command.

Reference link