用终端运行应用程序,怎样使终端关闭而这个程序不关闭.

时间:2022-06-19 17:46:16
比如在终端输入gvim,可以打开vim 7.1.但关闭终端后gvim7.0不会随终端关闭.但现在大部分的程序是会随终端一起关闭的.
我想是因为终端关闭的时候发送了一个什么信号给用自已打开的应用程序,是不是在应用程序中屏蔽掉这个消息,或者自已处理这个消息就可以了,具体又是什么呢>?

17 个解决方案

#1


后台运行


youprogram &

#2


  nohup 命令

  用途:不挂断地运行命令。

  语法:nohup Command [ Arg ... ] [ & ]

   描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。

   无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

  退出状态:该命令返回下列出口值:

  126 可以查找但不能调用 Command 参数指定的命令。

  127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。

  否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

nohup命令及其输出文件

  nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。

该命令的一般形式为:nohup command &

使用nohup命令提交作业

如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
nohup command > myout.file 2>&1 &

在上面的例子中,输出被重定向到myout.file文件中。

#3


问是我要在终端运行这个程序,而且像gvim一样,运行的时候并没有使用什么nohup命令,就跟运行其它程式一样:
$ gvim
$ emacs

#4


守护进程

通常用户打开的一个程序是和终端连系到一起的。关闭终端,程序自然也就退出了。

把程序变成守护进程,使其不再属于任意一个终端。

#5


看来还是没看懂我的意思,我想gvim绝对不是一个守护进程吧

#6


我也没明白你到底要做什么,你的意思是不想用后台运行的方式,但是又要在终端里面运行如gvim这样的程序,而且你运行的程序不是你自己写的,又想它不受终端的控制?

#7


在后台的话就用守护进程好了
或者做成随内核一起启动的程序
再rc文件中添加一行:
./yourprogram  -&

#8


引用 5 楼 zzdmfk 的回复:
看来还是没看懂我的意思,我想gvim绝对不是一个守护进程吧


gvim不是Daemon, 但是它可以做成以下这个:
1. 终端启动gvim, 
2. gvim fork()子进程, 并且提升自己(或者屏蔽HUP信号)
3. gvim 子进程与用户交互
4. gvim 主进程退出.
这样在Terminal退出后, 由gvim启动的子进程是不受Terminal影响的.

#9


引用 6 楼 gcc_gun 的回复:
我也没明白你到底要做什么,你的意思是不想用后台运行的方式,但是又要在终端里面运行如gvim这样的程序,而且你运行的程序不是你自己写的,又想它不受终端的控制?

我也是不明白,用nohup不就ok的吗

#10


引用楼主 zzdmfk 的回复:
比如在终端输入gvim,可以打开vim 7.1.但关闭终端后gvim7.0不会随终端关闭.但现在大部分的程序是会随终端一起关闭的.
我想是因为终端关闭的时候发送了一个什么信号给用自已打开的应用程序,是不是在应用程序中屏蔽掉这个消息,或者自已处理这个消息就可以了,具体又是什么呢>?

gvim启动的是图形界面(X Window)的?

#11


gvim当然是图形界面,程序当然是我自已写的,难道一定要我自已写成deamon才能实现这样的功能吗?我用终端打开linux QQ,关闭终端后,QQ不会随着关闭,难道QQ也是写成deamon?

#12


我的qq不过是
$ qq
还是
$ qq&
关闭gnome terminal都会终止

#13


后台运行不行么?

#14


可能是系统的原因吧,我用的redhat5.1

#15


shopt -o huponexit
设置让你的shell有终端挂起时不给属于这个终端的进程发送SIGHUP信号。

#16


应该是屏蔽SIGHUP信号就可以了.

#17


不是屏蔽SIGHUP信号,是不发送SIGHUP信号?

#1


后台运行


youprogram &

#2


  nohup 命令

  用途:不挂断地运行命令。

  语法:nohup Command [ Arg ... ] [ & ]

   描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。

   无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

  退出状态:该命令返回下列出口值:

  126 可以查找但不能调用 Command 参数指定的命令。

  127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。

  否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

nohup命令及其输出文件

  nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。

该命令的一般形式为:nohup command &

使用nohup命令提交作业

如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
nohup command > myout.file 2>&1 &

在上面的例子中,输出被重定向到myout.file文件中。

#3


问是我要在终端运行这个程序,而且像gvim一样,运行的时候并没有使用什么nohup命令,就跟运行其它程式一样:
$ gvim
$ emacs

#4


守护进程

通常用户打开的一个程序是和终端连系到一起的。关闭终端,程序自然也就退出了。

把程序变成守护进程,使其不再属于任意一个终端。

#5


看来还是没看懂我的意思,我想gvim绝对不是一个守护进程吧

#6


我也没明白你到底要做什么,你的意思是不想用后台运行的方式,但是又要在终端里面运行如gvim这样的程序,而且你运行的程序不是你自己写的,又想它不受终端的控制?

#7


在后台的话就用守护进程好了
或者做成随内核一起启动的程序
再rc文件中添加一行:
./yourprogram  -&

#8


引用 5 楼 zzdmfk 的回复:
看来还是没看懂我的意思,我想gvim绝对不是一个守护进程吧


gvim不是Daemon, 但是它可以做成以下这个:
1. 终端启动gvim, 
2. gvim fork()子进程, 并且提升自己(或者屏蔽HUP信号)
3. gvim 子进程与用户交互
4. gvim 主进程退出.
这样在Terminal退出后, 由gvim启动的子进程是不受Terminal影响的.

#9


引用 6 楼 gcc_gun 的回复:
我也没明白你到底要做什么,你的意思是不想用后台运行的方式,但是又要在终端里面运行如gvim这样的程序,而且你运行的程序不是你自己写的,又想它不受终端的控制?

我也是不明白,用nohup不就ok的吗

#10


引用楼主 zzdmfk 的回复:
比如在终端输入gvim,可以打开vim 7.1.但关闭终端后gvim7.0不会随终端关闭.但现在大部分的程序是会随终端一起关闭的.
我想是因为终端关闭的时候发送了一个什么信号给用自已打开的应用程序,是不是在应用程序中屏蔽掉这个消息,或者自已处理这个消息就可以了,具体又是什么呢>?

gvim启动的是图形界面(X Window)的?

#11


gvim当然是图形界面,程序当然是我自已写的,难道一定要我自已写成deamon才能实现这样的功能吗?我用终端打开linux QQ,关闭终端后,QQ不会随着关闭,难道QQ也是写成deamon?

#12


我的qq不过是
$ qq
还是
$ qq&
关闭gnome terminal都会终止

#13


后台运行不行么?

#14


可能是系统的原因吧,我用的redhat5.1

#15


shopt -o huponexit
设置让你的shell有终端挂起时不给属于这个终端的进程发送SIGHUP信号。

#16


应该是屏蔽SIGHUP信号就可以了.

#17


不是屏蔽SIGHUP信号,是不发送SIGHUP信号?