2

I often execute GUI programs, such as firefox and evince from shell. If I type "firefox &", firefox is considered as a bash job, so "fg" will bring it to foreground and "hang" the shell. This becomes annoying when I have some background jobs such as vim already running.

What I want is to launch firefox and dis-associate it with bash. Consider the following ideal case with my imaginary runbg:

$ vim foo.tex
ctrl+z and vim is job 1
$ pdflatex foo
$ runbg evince foo.pdf
evince runs in background and I get me bash prompt back
$ fg
vim goes foreground

Is there any way to do this using existing program? If not, I will write my own runbg.

2
  • nohup and disown are not what you're after?
    – slhck
    Jun 11, 2012 at 9:40
  • Note that you can specify the job that you want to move to the foreground i.e. fg %1.
    – cYrus
    Jun 11, 2012 at 15:58

2 Answers 2

4

How about this?

( firefox & )

This seems to keep it out of the jobs table, and fg can't see it at all.

1
  • 1
    It works. clever idea. Oct 2, 2015 at 1:54
1

Do this:

bash$ firefox &
bash$ disown

Bash has now forgotten about the background job you just created.

3
  • After using it for sometime, I couldn't get used to it. The problem is I have to specify the job number. disown with no argument doesn't detach the previous background job, but the "current job", which I found strangely defined. Jun 12, 2012 at 7:39
  • I believe the most-recently backgrounded job is always the current job, unless you change the current job before you type disown.
    – Fran
    Jun 12, 2012 at 14:50
  • Hi Fran, try this. 1. vim foo; 2. gedit bar &; 3. disown; 4. fg. Step 3 disowns vim and step 4 brings gedit to foreground. After reading bash manual, I still don't know why bash considers vim as the current job in step 3. Jun 18, 2012 at 9:22

You must log in to answer this question.

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