Suppose you inadvertantly spawn enough processes (perl
, say) to
exhaust your system’s available PIDs. You know it’s PIDs you’re out of,
not memory, because you had a bunch of memory-hungry processes open too
(Google Chrome helpers, whatever), but you’ve closed them, and still in
a shell you get this:
$ killall -9 perl
[forkpty: Resource temporarily unavailable]
You don’t have a root
shell available to get you out
of this mess. Short of rebooting, what to do?
$ exec killall -9 perl
exec
corresponds to the execv(2)
system call, which handily
replaces your shell with its argument (here, killall -9 perl
) rather
than fork(2)
ing it into its own process. Keep in mind, however, that
not fork()
ing a child process means there’s no parent process to
return to: you get one shot at this trick per shell you have open at the
time.