Is there an overlap in the uses of PID and jobspec in Bash?
In my script I store the PID of a command in a variable using
$!. Then I call
disown with the PID to remove the job from the shell's active jobs table. Later the script may or may not kill the process using
kill depending on circumstances. The purpose of this is so that unsightly 'job killed' messages do not appear in the terminal and make my script's neat output look unsightly.
It works fine, but I am confused by the difference between PID and jobspec, because...
$! - the PID of the most recent background command. disown [-ar] [-h] [jobspec ...] kill [-s sigspec | -n signum | -sigspec] [pid | jobspec]
disown requires a jobspec, but I am giving it a PID.
man bash says that
disown returns 0 unless jobspec does not specify a valid job. I give it a PID and it returns 0, so all seems ok.
A search through
man bash for jobspec makes no mention that a PID can be used instead of a jobspec in general and the
disown entry does not say a PID can be used instead of a jobspec.
PID and jobspec are not the same thing, but is there an overlap in their use? If not then why does my code work? Is it as simple as
disown being able to take a PID instead of a jobspec and that this is not documented in
choroba is correct,
disown being able to take a PID instead of a jobspec does seem to be an undocumented feature of
disown. I have now confirmed this with tests on 2 different versions of GNU Bash.
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu) [On Linux Mint] GNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu) [On Debian]
Although not documented by GNU (as far as I can tell), it is documented by the Linux Documentation Project, in the 3rd sentence on their Job Control Commands page.
I emailed the maintainer of the GNU Bash man page suggesting that the
disown entry in the shell builtin commands section be changed:
From: disown [-ar] [-h] [jobspec ...] To: disown [-ar] [-h] [jobspec | pid] ...
He has now confirmed the error and has made the change.