4

How do you automatically disown an application after you have started it from a terminal?

For example: if you start a terminal and run firefox the application will start, but when you then close the terminal firefox will close as well. To avoid unintentionally closing applications that have been started from a terminal, one can first put them in the background with the ampersant: firefox & which also restores the ability to use that terminal's prompt. Next, you can disown the application from that same terminal using the process ID (PID) of the application, see this example below:

$ firefox & 
$ ps | grep firefox
14917 pts/6    00:00:00 firefox
$ disown 14917

The application now runs independently from the terminal you are using, and closing the terminal will no longer terminate the application.

But how can you do this automatically each time you start an application?

4
  • I don't understand what the question is here. Are you looking for a way to automatically run “applications” through startAndDisown? How would you define “applications”? ps is an application, just like firefox. Commented May 21, 2016 at 21:45
  • Maybe I'm misinformed about this, but AFAIK, sending the application to background continues to work even after you close the terminal.
    – ILMostro_7
    Commented May 22, 2016 at 0:47
  • Did you mean to post the second part of this as an answer? Commented May 22, 2016 at 12:00
  • @djsmiley2k yes I did, but I did not have enough reputation on this board yet. Commented May 22, 2016 at 19:31

3 Answers 3

6

The simplest way is to execute:

daemon firefox

so you can continue using/closing the terminal itself

3
  • 3
    or nohup firefox if you're running ordinary linux
    – Jasen
    Commented May 22, 2016 at 1:25
  • Hah! the answer was much easier than I thought myself! Thanks for improving :) Commented May 22, 2016 at 19:37
  • 1
    for those wondering what difference this makes, see unix.stackexchange.com/q/3886/103120
    – phil294
    Commented Apr 19, 2019 at 16:04
2

EDIT: a better answer was provided by I-V.

To do this automatically, you could use a bash alias. If you add the following lines to your .bash_aliases file in your home directory, you can start any application my_application from the terminal while automatically putting it on the background and subsequently disowning it from that terminal, using the command s my_application:

# start programs from shell but immediately disown them
startAndDisown() {
    $1 & disown $! 
}
alias s=startAndDisown

Note that $! automatically returns the PID of the last async job.

1

firefox & disown $! doesn't work for me, but a similar solution that works for me is firefox&;disown

Another solution that does not involve disown is to use GNU Screen. It will preserve your terminal session even if you close the terminal window. However it's practicality is bounded by how you use your terminal. If you only use one terminal window at a time, this is a great solution. If you use more terminals, less so. Install screen using your favourite package manager, then everytime you open a terminal type screen -r (or screen if no screen session is running). You then don't have to worry about closing your terminal. This is a very niche solution, but it could fit you.

1
  • 1
    That's syntax error. You can't have a ; immediately after &.
    – muru
    Commented Mar 4 at 2:00

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .