`
jiangshuiy
  • 浏览: 340062 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

小技巧:让linux程序在后台运行

 
阅读更多

有些时候,我们需要在终端启动一个程序,并使之运行——但是如果关闭终端,那么这个程序也就随着关闭了。那么有没有什么方法在关闭终端后,让已经从这个终端启动的程序继续运行呢?

前置知识:

xterm,console,tty,pts,pty的区别

  • shell是直接和内核进行通信的东西
  • xterm是一个软件概念,可以通过这个程序连接到console从而控制主机,可以理解为cli形式的终端模拟器,而gnome-terminal,konsole就是gui形式的终端模拟器
  • console是主机的控制台,是一个物理概念。
  • tty、pty、pts都是终端,是硬件或者设备概念。
  • tty是所有终端设备的总称
  • pty是其中一类,伪终端,或者叫虚拟终端
  • “&” 命令行结尾法:

在Unix/Linux下如果想让程序独立终端运行,一般都是使用 & 在命令结尾来让程序自动运行。(命令后可以不追加空格)

打开gnome-terminal,执行如下命令:

delectate@delectate:~$ totem &
[1] 8510
delectate@delectate:~$ 
有几点需要注意:
  1. 已经启动的程序依然attach于当前pts,只有当前终端模拟器关闭(使用exit命令退出),进程自动被tty继承。
  2. delectate@delectate:~$ ps -e | grep totem
        //程序已被以totem & 形式启动,当前附在pts0上
    8819 pts/0    00:00:00 totem
    delectate@delectate:~$ ps -e | grep totem
       //pts0的模拟终端被exit命令关闭,totem自动附在tty
    8819 ?        00:00:00 totem
    delectate@delectate:~$
  3. 具有debug输出的进程,需要按enter键进行中断当前debug输出。但是如果程序持续进行printf,你将无法输入任何命令。
  4. delectate@delectate:~$ vlc &
    [1] 8850
    delectate@delectate:~$ VLC media player 1.0.6 Goldeneye
    [0x8b998b0] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface.
                                                                   //enter pressed
    delectate@delectate:~$                               //show a clean terminal now
    ** (:8850): CRITICAL **: giop_thread_request_push: assertion `tdata != NULL' failed
                                                                   //仍然在输出数据……
                                                                   //关闭程序
    [1]+  Done                    vlc
    delectate@delectate:~$
  5. 你无法记录程序的debug输出结果。
  6. 只有当虚拟终端是 $ 或者 # 时候,才可以关闭此终端,否则可能导致已经启动的进程被关闭(按enter——如果程序持续输出信息而没有出现 $ 或 #)
  • 使用nohup命令:

nohup描述:Run COMMAND, ignoring hangup signals.(忽略任何中断/挂起信号,使命令继续执行)

但是当你尝试使用命令:

1
nohup command

时候却会遇到不大不小的麻烦……

delectate@delectate:~$ nohup vlc
nohup: ignoring input and appending output to `nohup.out'

是的,虽然它自动把debug信息记录到nohup.out文件,但是你却无法使用这个终端进行任何操作。

所以你需要和第一个方法混用,即

nohup command {option} &

混用后,它会自动把你执行的命令输出结果记录到权限为-rw——-,名为nohup.out的文件中。

但是你仍然需要

delectate@delectate:~$ nohup vlc &
[1] 9045
delectate@delectate:~$ nohup: ignoring input and appending output to `nohup.out'
                                                                         //在这里按一下回车或以ctrl+c以
                                                                             //show a clean terminal 
delectate@delectate:~$

与使用 “&” 性质相同,当前启动程序的终端如果没有被关闭,已经启动的程序附在pst上;如果终端被关闭,则自动附在tty。

如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out。默认状态下,nohup默认输出到nohup.out文件,你也可以利用重定向来指定输出文件:

nohup command {option} > myout.file 2>&1 &

只有当虚拟终端是 $ 或者 # 时候,才可以关闭此终端,否则可能导致已经启动的进程被关闭(按enter——如果程序持续输出信息而没有出现 $ 或 #)

  • 其他相关命令:

jobs:查看当前有多少在后台运行的命令
fg:将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
bg:将一个在后台暂停的命令,变成继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

  • 杀死进程

杀死已经启动的程序和普通方式一样:

  • pkill -9 name
  • killall name
  • kill pid
  • 命令应用:

linux服务器挂机下载;启动相关服务;linux服务器启动进程(尤其是ssh登录)

    我就曾经用
    1
    nohup aria2c -i downloadlist -m 0 -j 1 &

    从jsharer极享下载了不少动漫。

  • 参考资料

http://topic.csdn.net/u/20100201/17/a34370cc-8a61-4315-a4d0-84242362064d.html
http://www.linuxsir.org/bbs/thread362001.html
http://www.williamlong.info/archives/482.html
http://dev.firnow.com/course/6_system/linux/Linuxjs/2008716/133186.html

http://www.cnblogs.com/hnrainll/archive/2011/07/04/2097408.html

转自:https://www.deleak.com/blog/2010/05/19/run-software-on-background/

分享到:
评论

相关推荐

    计算机的几个实用小技巧

    2. 关闭不必要的后台程序:许多程序会在后台运行,消耗电力。通过任务管理器(Windows)或活动监视器(Mac)可以查看并关闭这些程序。 3. 减少屏幕亮度:降低屏幕亮度可以显著减少电池消耗,特别是在户外或者光线...

    Linux程序设计__技术技巧与项目实践Linux应用技术.pptx

    - **前后台程序**:使用`&`符号将程序置于后台运行,`fg`和`bg`命令可以在前台和后台之间切换进程。 - **任务调度**:`crontab`命令用于设置定时任务。 6. **控制提示符与命令组合** - **命令组合**:通过管道`|...

    linux使用小技巧(1)

    在启动X应用程序时加上`&`符号可以使程序在后台运行,例如: ``` # netscape & ``` 这样做的好处是可以避免启动其他应用程序时被阻塞。 #### 15. 强制重启X Server 当X Server出现问题时,可以通过组合键`Ctrl+Alt...

    嵌入式Linux C语言应用程序设计

    4. **设备驱动编程**:在嵌入式Linux中,设备通常通过设备驱动程序与上层应用交互。了解设备驱动的工作原理,如字符设备、块设备驱动,以及如何编写和使用它们,对嵌入式开发者尤为重要。 5. **系统服务与守护进程*...

    linux一些使用技巧

    14. **后台运行X程序**:在X程序后面加上`&`,如`netscape &`,可以让程序在后台运行,以便在同一终端继续输入命令。 15. **强制退出X**:当X窗口系统出现问题时,如果鼠标和键盘失效,可以尝试使用组合键Ctrl+Alt+...

    Linux实用小技巧.pdf

    以下是一些关于Linux实用小技巧的详细说明: 1. **彩色目录和文件列表**: 在Redhat Linux中,使用`ls -color -F`可以以彩色方式显示目录和文件列表,`-color`参数使得不同类型的文件用不同的颜色区分,`-F`参数会...

    Linux命令使用技巧集锦

    14. **后台运行X程序**:在命令后加上`&`符号,如`netscape &`,可以让X程序在后台运行,以便在同一终端窗口中执行其他命令。 15. **强制退出X**:当X窗口系统出现问题时,可以按下Ctrl+Alt+Backspace组合键强制...

    第五章 Linux命令和技巧

    - `nohup`:让程序在后台运行,即使用户退出登录也会继续执行。 6. **网络和系统信息** - `ping`:测试网络连通性。 - `ifconfig`(在某些发行版中已弃用,用 `ip addr` 替代):查看网络接口配置信息。 - `...

    实用Linux命令行技巧

    3. **后台运行**: - 示例:`11:07:16~/rails server &>/dev/null &` - 在后台启动Rails服务器,并重定向所有输出到`/dev/null`。 #### 八、工具推荐与快捷键 1. **iterm2.com**: 提供了一个高级的终端模拟器...

    Linux从入门到精通.pdf

    - **命令行技巧**:分享提高命令行使用效率的小技巧,比如使用tab键自动补全、管道操作等。 ### 文件系统管理 - **文件系统结构**:解释Linux下的文件系统结构,重点介绍 `/`、`/home`、`/usr`、`/etc` 等目录的...

    linux命令大全,以及例子

    - `nohup`:让程序在后台运行,即使用户退出也会继续执行。 - `jobs`:查看当前Shell会话中的后台任务。 - `bg`:将暂停的前台进程放到后台运行。 - `fg`:将后台进程拉到前台运行。 6. **文件与目录操作** - ...

    日常运维常用笔记总结(Linux,Mac 命令,开发相关工具以及指令.zip

    - **nohup**: 让程序在后台运行,即使用户退出登录也会继续执行。 - **top/htop**: 实时监控系统资源占用。 5. **网络操作**: - **ping**: 检测网络连通性。 - **ifconfig**: 查看和配置网络接口。 - **...

    Complete Linux Command Reference

    - `nohup`:让程序在后台运行,即使用户退出也会继续执行。 - `cron`:定时任务调度器,定期执行任务。 5. **网络和通信**: - `ifconfig`:查看和配置网络接口。 - `ping`:测试网络连通性。 - `nc`(netcat...

    linux基本常用命令

    - **Daemon**:了解后台服务程序的概念和用途。 - **Linux基本操作**: - **登录界面选择**:了解如何在登录时选择KDE或GNOME界面。 - **Konsole使用**:熟悉Linux终端的使用方法。 - **系统管理**:包括注销...

    自由软件技巧共享Linux运用

    将程序后台运行也是提高效率的一个技巧。在命令后添加`&`,如`updatedb &`或`netscape &`,可以使程序在后台执行,释放终端进行其他操作。然而,需要注意的是,如果退出当前Shell,后台进程也会被终止。因此,使用`...

    linux操作系统下C语言编程入门分析.pdf

    2. Linux程序设计入门 - 源程序的编译:在Linux中,C语言程序通常通过GCC(GNU Compiler Collection)进行编译。开发者需要了解如何使用`gcc`命令来编译、链接源代码,以及如何处理编译错误和警告。 - Makefile的...

    Linux网络项目实训教程1

    - **大小写敏感**:在Linux中,命令和文件名都是区分大小写的。例如,`ls` 和 `LS` 是两个不同的命令。 - **自动补全**:通过使用 Tab 键,用户可以在输入命令的部分字符串之后,让系统自动完成剩余部分。如果输入的...

    Linux 指令集

    - `nohup`:让程序在后台运行,即使退出终端也不受影响。 5. 系统信息和控制: - `uname`:显示系统信息,如内核版本。 - `date`:查看和设置日期时间。 - `shutdown` 和 `reboot`:关机或重启系统。 - `...

    Linux初,中级学习者教程-Linux操作系统技术合集

    - **C程序编译和运行**:说明如何使用GCC编译C程序,并运行编译后的程序。 - **用GNU gdb调试**:介绍如何使用GNU gdb调试工具。 - **C++程序的编译**:说明C++程序的编译流程。 - **Kdevelop-安装和启动**:介绍...

Global site tag (gtag.js) - Google Analytics