如何终端运行一个程序但关闭终端而不杀死进程?
Tofloor
poster avatar
zhangpiu
deepin
2011-11-17 01:09
Author
喜欢终端启动程序,我一般都是比如:firefox &放入背景执行,但是有时不小心会关闭终端导致firefox不小心关闭,如何能在终端启动程序关闭终端而不杀死进程?我终端运行virtualbox打XP运行然后关闭终端是没问题的。
Reply Favorite View the author
All Replies
stephen
deepin
2011-11-17 03:51
#1
喜欢终端启动程序,我一般都是比如:firefox &放入背景执行,但是有时不小心会关闭终端导致firefox不小心关闭,如何能在终端启动程序关闭终端而不杀死进程?我终端运行virtualbox打XP运行然后关闭终端是没问题的。

不要直接点叉关闭终端,而是敲exit或者用ctrl-d来退出终端。
Reply View the author
zhangpiu
deepin
2011-11-17 05:29
#2
[quote]喜欢终端启动程序,我一般都是比如:firefox &放入背景执行,但是有时不小心会关闭终端导致firefox不小心关闭,如何能在终端启动程序关闭终端而不杀死进程?我终端运行virtualbox打XP运行然后关闭终端是没问题的。

不要直接点叉关闭终端,而是敲exit或者用ctrl-d来退出终端。[/quote]

谢谢,这样可以,我刚又找到一种方法 ,加参数如:chromium-browser %U,不过这样对于firefox却不行,不知为何,呵呵
Reply View the author
186******98
deepin
2011-11-17 05:49
#3
使用 nohup 命令, 比如 firefox 你可以在终端输入
  1. nohup firefox
Copy the Code
这样终端关闭, firefox 还是可以继续运行。

默认 nohup 会输出 nohup.out 文件, 如果你不想要 nohup.out 输出, 可以使用下面的格式调用命令:
nohup COMMAND > /dev/null 2>&1

比如像前面的 firefox 就可以使用
  1. nohup firefox > /dev/null 2>&1
Copy the Code
来调用。
Reply View the author
stephen
deepin
2011-11-17 06:18
#4
[quote][quote]喜欢终端启动程序,我一般都是比如:firefox &放入背景执行,但是有时不小心会关闭终端导致firefox不小心关闭,如何能在终端启动程序关闭终端而不杀死进程?我终端运行virtualbox打XP运行然后关闭终端是没问题的。

不要直接点叉关闭终端,而是敲exit或者用ctrl-d来退出终端。[/quote]

谢谢,这样可以,我刚又找到一种方法 ,加参数如:chromium-browser %U,不过这样对于firefox却不行,不知为何,呵呵[/quote]

原因解释起来比较复杂,是操作系统的原理。你在Bash里启动了一个进程,这个进程就是当前Bash进程的子进程。而被启动的这个进程,可以自行脱离它的父进程,把init进程作为自己的父进程,但也可以不这么做。chromium-browser启动时,会自行脱离Bash,而firefox不会。

关闭终端有两种方式,一种是点叉,这时候,你关闭的是gnome-terminal这个进程,而Bash是它的子进程,它会将Bash杀死,而Bash的所有子进程都会因为父进程死了而同时死掉,所以你直接点叉会导致firefox被关掉。而如果你是在终端里输exit命令或者ctrl-d,实际上是Bash自己退出,bash在自己退出时,会将自己启动的在后台工作的子进程脱离,然后再退出,因此这种方式不会导致firefox关闭。

前面懒猫介绍的nohup的方法,原理是这样的,Bash启动了nohup这个进程,nohup这个进程会主动脱离Bash,因此无论用何种方式关闭Bash,都不会导致nohup这个进程退出,而nohup再启动firefox,firefox的父进程是nohup,因此关闭终端时,firefox也不受影响。

说起来很绕,不知道你理解没有。不过不理解也没关系的,只要知道怎么用就行了。
Reply View the author
zhangpiu
deepin
2011-11-17 20:10
#5
谢谢Stephen,大致理解了,幸亏以前读过鸟哥私房菜一些关于进程等的概念
Reply View the author
zhangpiu
deepin
2011-11-17 20:12
#6
使用 nohup 命令, 比如 firefox 你可以在终端输入
  1. nohup firefox
Copy the Code
这样终端关闭, firefox 还是可以继续运行。

默认 nohup 会输出 nohup.out 文件, 如果你不想要 nohup.out 输出, 可以使用下面的格式调用命令:
[quote]nohup COMMAND > /dev/null 2>&1

比如像前面的 firefox 就可以使用
  1. nohup firefox > /dev/null 2>&1
Copy the Code
来调用。[/quote]

谢谢,受教了
Reply View the author
s.******[email protected]
deepin
2011-11-18 03:54
#7
ctrl-D 关闭终端,没问题啊。

或者你用alt+f2启动。
Reply View the author