2

According to Bash: Special Parameters:

($!) Expands to the process ID of the job most recently placed into the background, whether executed as an asynchronous command or using the bg builtin

I can utilize this as follows:

$ leafpad &
[2] 3962
$ kill $!

This works and kills the most recent process (eg. leafpad) but for notify-send it seems not working:

$ notify-send Hello &
[2] 4052
$ kill $!
bash: kill: (4052) - No such process

And I have to use killall notify-osd in order to kill it.

So, I want to know why kill $! doesn't work for notify-send? And what is the proper way to kill such a process?

Note: I know that I can specify the time-out, but this is a different issue.

Pandya
  • 24,618

1 Answers1

6

notify-send doesn't run for any length of time: It starts, connects to notify-osd, delivers the notification message to be displayed, and terminates.

By the time you run the kill command, notify-send has already terminated on its own. The notification you're seeing is served by notify-osd.

n.st
  • 8,128
  • This is a more clear answer than what I had written just before; I've deleted my post & will add the links here just in case they are useful to Pandya: notify-osd discussion on Ubuntuforums.

    In short, notify-send is part of notify-osd, and is not running by the time you kill it, and also is supposed to only run as "notify-osd" according to NotifyOSD developer Design Specifications

    – forgotstackxpassword Apr 02 '16 at 15:05
  • BTW, the OP can prove this for themselves by hitting Enter again between the notify-send Hello & and the kill $!. On hitting Enter, the shell should display something like [1]+ Done notify-send Hello indicating that the job has terminated. – cas Apr 02 '16 at 22:37