Ubuntu – How set command in background,close terminal and get it back to fg

bashprocess

I'm trying to find out how to run a command in the background and then bring it to the foreground later. I'm fed up of tutorials and answers where people state that it's simple, just append & to the end of the command to get it run in the background. It's working only within a single terminal window. I want to put the command into the background in one terminal and get it back to foreground after reopening the terminal

Example:

$ grunt &
$ jobs
$ [1]+  Running  grunt &

Of course after closing terminal no one job is found.

Next example:

$ grunt & disown #the same behavior has: $ setsid grunt &
$ jobs
$ [nothing] #but ps shows that grunt is working

after close terminal, grunt doesn't work

What did I do wrong? Could anybody explain me how to run the command in the background and get it back to foreground.

Best Answer

It's impossible in the way you want.

Let's review some basic concepts:

  • A process group is a collection of related processes which can all be signalled at once.
  • A session is a collection of process groups, which are either attached to a single terminal device (known as the controlling terminal) or not attached to any terminal.

If you closed the terminal, all the processes in the session are dead except those (daemons) reparented to the init process. And there's no way to give them a controlling terminal again.

In a word, process reparenting is highly restricted in POSIX systems (daemonizing is an exception) and your requirements can't be satisfied.