后台执行命令 -- &和nohup

标签: 后台 命令 nohup | 发表时间:2014-03-24 09:47 | 作者:wbj0110
出处:http://www.iteye.com

当 我们在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件。对于密集访问磁盘的进程,你可能 希望它能够在每天的非负荷高峰时间段运行。为了使这些进程能够在后台运行,也就是说不在终端屏幕上运行,有几种选择方法可供使用。

 

在本文中将讨论:

• 设置crontab文件,并用它来提交作业。

• 使用a t命令来提交作业。

• 在后台提交作业。

• 使用nohup命令提交作业。

 

名词解释:

<!--[if !supportLists]-->1、  <!--[endif]-->cron,系统调度进程,可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行。

<!--[if !supportLists]-->2、  <!--[endif]-->at命令,使用它在一个特定的时间运行一些特殊的作业,或在晚一些的非负荷高峰时间段或高峰负荷时间段运行。

<!--[if !supportLists]-->3、  <!--[endif]-->&,使用它在后台运行一个占用时间不长的进程。

<!--[if !supportLists]-->4、  <!--[endif]-->nohup 使用它在后台运行一个命令,即使在用户退出时也不受影响。

 

& 命令

当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。

可以使用&命令把作业放到后台执行。

该命令的一般形式为:命令&。

为什么要在后台执行命令?因为当在后台执行命令时,可以继续使用你的终端做其他事情。适合在后台运行的命令有f i n d、费时的打印作业、费时的排序及一些s h e l l脚本。在后台运行作业时要当心:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等。不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中:

command  >  out.file  2>&1  &

在上面的例子中,所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。当你成功地提交进程以后,就会显示出一个进程号,可以用它来监控该进程,或杀死它。

 

向后台提交命令:

现在我们运行一个find命令,查找名为“srm.conf”的文件,并把所有标准输出和错误输出重定向到一个叫find.dt的文件中:

find srm.conf > find.dt 2>&1 &

在上面的例子中,在我们成功提交该命令之后,系统给出了它的进程号27015。当该作业完成时,按任意键(一般是回车键)就会出现一个提示。

 

ps 命令查看进程

当一个命令在后台执行的时候,可以用提交命令时所得到的进程号来监控它的运行。在前面的例子中,我们可以按照提交ps1时得到的进程号,用p s命令和g r e p命令列出这个进程:ps –ef | grep ps1,记住,在用p s命令列出进程时,它无法确定该进程是运行在前台还是后台。

 

杀死后台进程

如果想杀死后台进程可以使用kill命令。当一个进程被放到后台运行时,shell会给出一个进程号,我们可以根据这个进程号,用k i l l命令杀死该进程。该命令的基本形式为:kill -signal [process_number];现在暂且不要考虑其中的各种不同信号;在杀进程的时候,执行下面的命令(你的进程号可能会不同)“kill  29563”并按回车键。系统将会给出相

应的信息告诉用户进程已经被杀死。

如果系统没有给出任何信息,告诉你进程已经被杀死,那么不妨等一会儿,也许系统正在杀该进程,如果还没有回应,就再执行另外一个k i l l命令,这次带上一个信号选项:15如果用上述方法提交了一个后台进程,那么在退出时该进程将会被终止。为了使后台进程能够在退出后继续运行,可以使用nohup命令,下面我们就介绍这一命令。

 

nohup 命令

如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令,该命令可以在你退出帐户之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。该命令的一般形式为: nohup command &

 

使用 nohup 命令提交作业

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

 

一次提交几个作业

如果希望一次提交几个命令,最好能够把它们写入到一个shell脚本文件中,并用nohup命令来执行它。

 

小结

本 文中所讨论的工具主要是有关后台运行作业的。有时我们必须要对大文件进行大量更改,或执行一些复杂的查找,这些工作最好能够在系统负荷较低时执行。创建一 个定时清理日志文件或完成其他特殊工作的脚本,这样只要提交一次,就可以每天晚上运行,而且无需你干预,只要看看相应的脚本日志就可以了。crond和其他工具可以使系统管理任务变得更轻松。



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [后台 命令 nohup] 推荐:

后台执行命令 -- &和nohup

- - Linux - 操作系统 - ITeye博客
当 我们在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件. 对于密集访问磁盘的进程,你可能 希望它能够在每天的非负荷高峰时间段运行. 为了使这些进程能够在后台运行,也就是说不在终端屏幕上运行,有几种选择方法可供使用. • 设置crontab文件,并用它来提交作业.

Linux wget命令

- - CSDN博客推荐文章
wget是linux最常用的下载命令, 一般的使用方法是: wget + 空格 + 要下载文件的url路径. 例如: # wget  http://www.linuxsense.org/xxxx/xxx.tar.gz. 简单说一下-c参数, 这个也非常常见, 可以断点续传, 如果不小心终止了, 可以继续使用命令接着下载.

lsof命令

- - Dutor
  lsof, LiSt Opened Files, 列出打开的文件, 听起来很简单的样子. 但想*nix中很多其他工具一样, lsof把这件简单的事情做到了炉火纯青. 因为Unix认为”一切皆文件”, 那么”打开的文件”就不仅仅是传统意义上打开的文件了, 还可以是网络/Unix域套接字, 匿名/具名管道, 共享库文件, 目录文件, 设备文件等等.

sqlite3命令

- - 移动开发 - ITeye博客
转载自: http://www.cnblogs.com/frankliiu-java/archive/2010/05/18/1738144.html. SQLite库包含一个名字叫做sqlite3的命令行,它可以让用户手工输入并执行面向SQLite数据库的SQL命令. 本文档提供一个样使用sqlite3的简要说明.

Linux iostat命令

- - CSDN博客系统运维推荐文章
iostat用于输出CPU和磁盘I/O相关的统计信息. . iostat [ -c | -d ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ device [. iostat各个参数说明:. -c 仅显示CPU统计信息.与-d选项互斥. -d 仅显示磁盘统计信息.与-c选项互斥.

tcpdump命令

- - CSDN博客推荐文章
英文原意是dump traffic on a network ,即截获网络上的数据报,可以根据指定的网络接口来截获不同的数据报. 它会输出在某个网络接口上符合匹配表达式的报内容的描述. 当tcpdump完成抓包后,会打印出类似下面的内容: . 当然,在读取网络上的数据包时,得需要特权,比如linux上的超级用户.

linux命令locate

- - 操作系统 - ITeye博客
    locate命令其实是"find -name"的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息. Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件.

@lsof命令小节@

- - CSDN博客推荐文章
卸载移动存储时经常提示device busy,也可能误删了一个正在打开的文件.      lsof(list open files)是一个列出当前系统打开文件的工具. 在linux环境下,任何事物都以 文件的形式存在,通过文件不仅仅可以访问 常规数据,还可以访问 网络连接和硬件. 所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口.

linux常用命令

- - 梦幻主页的博客
1.# 表示权限用户(如:root),$ 表示普通用户.   开机提示:Login:输入用户名.   password:输入口令   用户是系统注册用户成功登陆后,可以进入相应的用户环境.   退出当前shell,输入:exit. 2.useradd netseek 添加一个netseek用户.   passwd netseek  给netseek这个用户设置密码.

strace命令小结

- - jackyrong
strace命令是很有用的进程跟踪命令,下面小结下:. 1 strace 是一个非常简单的工具,用来跟踪可执行程序的系统调用(system call). 最简单的使用是,它追踪可行程序运行时的整个生命周期,输出每一个系统调用的名字,参数和返回值. 但是它还可以做更多的事情:. 它可以基于系统调用或者系统调用组来过滤.