学习啦 > 学习电脑 > 操作系统 > Linux教程 > linux程序后台运行命令

linux程序后台运行命令

时间: 佳洲1085 分享

linux程序后台运行命令

  在关闭终端后,有时候我们仍然需要程序在后台继续运行,那需要怎么做呢?下面由学习啦小编为大家整理了linux程序后台运行命令的相关知识,希望大家喜欢!

  linux程序后台运行命令详解

  前置知识:xterm,console,tty,pts,pty的区别

学习啦在线学习网   shell是直接和内核进行通信的东西

  xterm是一个软件概念,可以通过这个程序连接到console从而控制主机,可以理解为cli形式的终端模拟器,而gnome-terminal,konsole就是gui形式的终端模拟器

  console是主机的控制台,是一个物理概念。

  tty、pty、pts都是终端,是硬件或者设备概念。

学习啦在线学习网   tty是所有终端设备的总称

  pty是其中一类,伪终端,或者叫虚拟终端

  linux程序后台运行命令一、“&” 命令行结尾法

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

学习啦在线学习网   打开gnome-terminal,执行如下命令:

  delectate@delectate:~$ totem &

  [1] 8510

  delectate@delectate:~$

  有几点需要注意:

学习啦在线学习网   已经启动的程序依然attach于当前pts,只有当前终端模拟器关闭(使用exit命令退出),进程自动被tty继承。

  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:~$

学习啦在线学习网   具有debug输出的进程,需要按enter键进行中断当前debug输出。但是如果程序持续进行printf,你将无法输入任何命令。

  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:~$

学习啦在线学习网   你无法记录程序的debug输出结果。

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

  linux程序后台运行命令二、使用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极享下载了不少动漫

3622354