《小技巧让linux程序在后台运行.docx》由会员分享,可在线阅读,更多相关《小技巧让linux程序在后台运行.docx(5页珍藏版)》请在三一办公上搜索。
1、小技巧让linux程序在后台运行小技巧:让linux程序在后台运行 有些时候,我们需要在终端启动一个程序,并使之运行但是如果关闭终端,那么这个程序也就随着关闭了。那么有没有什么方法在关闭终端后,让已经从这个终端启动的程序继续运行呢? 前置知识: xterm,console,tty,pts,pty的区别 shell是直接和内核进行通信的东西 xterm是一个软件概念,可以通过这个程序连接到console从而控制主机,可以理解为cli形式的终端模拟器,而gnome-terminal,konsole就是gui形式的终端模拟器 console是主机的控制台,是一个物理概念。 tty、pty、pts都是
2、终端,是硬件或者设备概念。 tty是所有终端设备的总称 pty是其中一类,伪终端,或者叫虚拟终端 “&” 命令行结尾法: 在Unix/Linux下如果想让程序独立终端运行,一般都是使用 & 在命令结尾来让程序自动运行。(命令后可以不追加空格) 打开gnome-terminal,执行如下命令: delectatedelectate:$ totem & 1 8510 delectatedelectate:$ 有几点需要注意: 1. 已经启动的程序依然attach于当前pts,只有当前终端模拟器关闭,进程自动被tty继承。 delectatedelectate:$ ps -e | grep tote
3、m /程序已被以totem & 形式启动,当前附在pts0上 8819 pts/0 00:00:00 totem delectatedelectate:$ ps -e | grep totem /pts0的模拟终端被exit命令关闭,totem自动附在tty 8819 ? 00:00:00 totem delectatedelectate:$ 2. 具有debug输出的进程,需要按enter键进行中断当前debug输出。但是如果程序持续进行printf,你将无法输入任何命令。 delectatedelectate:$ vlc & 1 8850 delectatedelectate:$ VLC
4、media player 1.0.6 Goldeneye 0x8b998b0 main libvlc: Running vlc with the default interface. Use cvlc to use vlc without interface. /enter pressed delectatedelectate:$ /show a clean terminal now * (:8850): CRITICAL *: giop_thread_request_push: assertion tdata != NULL failed /仍然在输出数据 /关闭程序 1+ Done vlc
5、 delectatedelectate:$ 3. 4. 你无法记录程序的debug输出结果。 只有当虚拟终端是 $ 或者 # 时候,才可以关闭此终端,否则可能导致已经启动的进程被关闭 使用nohup命令: nohup描述:Run COMMAND, ignoring hangup signals. 但是当你尝试使用命令: 1 nohup command 时候却会遇到不大不小的麻烦 delectatedelectate:$ nohup vlc nohup: ignoring input and appending output to nohup.out 是的,虽然它自动把debug信息记录到noh
6、up.out文件,但是你却无法使用这个终端进行任何操作。 所以你需要和第一个方法混用,即 nohup command option & 混用后,它会自动把你执行的命令输出结果记录到权限为-rw-,名为nohup.out的文件中。 但是你仍然需要 delectatedelectate:$ nohup vlc & 1 9045 delectatedelectate:$ nohup: ignoring input and appending output to nohup.out /在这里按一下回车或以ctrl+c以 /show a clean terminal delectatedelectate
7、:$ 与使用 “&” 性质相同,当前启动程序的终端如果没有被关闭,已经启动的程序附在pst上;如果终端被关闭,则自动附在tty。 如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out。默认状态下,nohup默认输出到nohup.out文件,你也可以利用重定向来指定输出文件: nohup command option myout.file 2&1 & 只有当虚拟终端是 $ 或者 # 时候,才可以关闭此终端,否则可能导致已经启动的进程被关闭 其他相关命令: jobs:查看当前有多少在后台运行的命令 fg:将后台中的命令调至前台继续运行。如果后台中有多个命令,
8、可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid) bg:将一个在后台暂停的命令,变成继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid) 杀死进程 pkill -9 name killall name 杀死已经启动的程序和普通方式一样: kill pid 命令应用: 我就曾经用 linux服务器挂机下载;启动相关服务;linux服务器启动进程 1 nohup aria2c -i downloadlist -m 0 -j 1 & 从jsharer极享下载了不少动漫。