Linux: View and kill disowned process

I have started a program in Linux using & and disown.
I wish to see if it is still running and possibly to kill it.

I started the process with commands like these:

(env)bash-4.2$ python manage.py update_rollups &
[1] 29144
(env)bash-4.2$ disown

I can no longer find it with ps aux, nor kill it based on the pid 29144.
I want to know if the process is still running (under init?).

I hope you can help!

1

3 Answers

In brief

With & and disown you do not change the PID [1] of the process.
If you do not see it in the ps -p <YOURPID> output, it is not any more running.
You can over-check it with an additional echo $? [2] after the ps (or kill) command, checking if the program exits with an exit code different from 0 (typically 1).

Understanding your commands.

  • Background: when you launch the command with the final & you send it in background.
    This means that:

    • It is present in the job list of your shell (in your example is the number [1] and you can refer to it as %1; (try the command jobs).
    • You can bring it in foreground and in background with fg and bg.
    • It is (still) "owned" by the (linked to the parent) shell: if the shell receives a SIGHUP signal, it will send a SIGHUP signal to the process too.

      $ sleep 1h &
      [1] 10795
      $ jobs
      [1]+ running sleep 1h &
      $ ps -l -p 10795
      F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
      0 S 1000 10795 8380 0 80 0 - 3107 hrtime pts/57 00:00:00 sleep
  • Disown: with the command disown you remove the job from the shell's job list, but you do not change its PID.

    $ disown
    $ jobs # <---- No jobs
    $ ps -l -p 10795
    F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
    0 S 1000 10795 8380 0 80 0 - 3107 hrtime pts/57 00:00:00 

    Note the same PPID (the shell still exists).
    Now we kill the shell.

    $ kill 8380 # Here we kill the shell
    $ ps -l -p 10795
    F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
    0 S 1000 10795 5339 0 80 0 - 3107 hrtime pts/57 00:00:00 sleep

    There is another PPID, the 5339, that with another invocation of ps, ps -p 5339, you will discover to be an init instance:

    $ ps -p 5339
    PID TTY TIME CMD
    5339 ? 00:02:20 init

pstree: a quicker way.

You can see with pstree more quickly.

Before the disown and kill the bash commands:

$ pstree -s -p 10795
init(1)───lightdm(1199)───lightdm(5259)───bash(8380)───sleep(10795)

After the disown and kill the bash:

$ pstree -s -p 10795
init(1)───lightdm(1199)───lightdm(5259)───init(5339)───sleep(10795)

Note: of course all the PIDs in your case will be different...

2

If it's not in ps auxf, then it's not running. If you run kill 29144 and get "No such process", that also means the process is not running.

1

Each process has a folder in the /proc filesystem with it's pid. If the folder doesn't exist, the process isn't running.

For example

/proc/29144/

you can view the process commandline

cat /proc/29144/cmdline

example output:

/usr/sbin/smbd

or check the process file status

stat /proc/29144/exe

example output:

File: /proc/29144/exe -> /usr/sbin/smbd Size: 0 Blocks: 0 IO Block: 1024 symbolic link
Device: 3h/3d Inode: 78497 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-04-07 12:18:01.719011505 +0200
Modify: 2017-04-07 12:18:01.369010535 +0200
Change: 2017-04-07 12:18:01.369010535 +0200 Birth: -

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like