linux 后台运行程序输出日志到指定文件

nohup /home/hu/projects/remap64/bin/demlinux.out 11  /home/hu/gt/N36E116/   /home/hu/gt/out1  /home/hu/gt/out1/base 2>&1 >demlog.log &

>覆盖,>>追加
2>&1 表示不仅命令行正常的输出保存到app.log中,产生错误信息的输出也保存到app.log文件中;

&

& 将任务放到后台运行

-------

Shell可以将标准输入(stdin)、标准输出(stdout)、标准错误输出(stderr)重定向为文件。也就是说,任何命令都可以用shell的“<”操作符将输入数据来源从stdin重定向为文件,比如:
$ mycommand < infile

同样,任何命令都可以将数据输出的目的地从stdout重定向为文件。
$ mycommand  > outfile       //创建或覆盖outfile
$ mycommand  >> outfile    //附加到outfile原有内容的末尾

一个命令也能够将stderr重定向到文件,同时仍然将写入标准输出的内容打印在屏幕上:
$ mycommand  2> errorfile
下面的命令将stdout及stderr都重定向到文件:

$ mycommand  > outfile  2> errorfile //输出到不同文件
$ mycommand  >& outfile                 //输出到一个文件

------

ps -ef | grep uname

pkill dout.out

-------

查看进程
ps  列出进程。
uptime   查看系统负载。
w  列出所有用户的活动进程。
top   监视进程资源占用情况。
gnome-system-monitor  监视系统负载和进程的图形化工具。
xload   监视系统负载情况的简单图形化工具。
free   显示可用内存情况。

进程(process)是Linux系统的工作单位。所运行的每个程序都会引发一个或多个进程。Linux提供了一些命令用于查看、操作这些进程。每个进程都以一个独有的数字代码标示,称作进程ID或PID。
进程与任务(参看第32页“Shell任务控制”)不同:进程是操作系统的一部分,任务却是更高层的结构,仅由其所在的shell控制。运行中的程序包含一个或多个进程;而任务包含一个或多个由shell命令执行的程序。
ps  stdin stdout -file --opt --help --versionps [options]
ps命令显示正在运行的进程信息,也可显示其他用户的进程。
$ ps

 ps
  PID    TTY          TIME       CMD
 4706    pts/2        00:00:01   bash
15007    pts/2        00:00:00   emacs
16729    pts/2        00:00:00   ps

ps至少有80个选项,这里只讨论其中几个最有用的组合。如果你觉得选项名看起来杂乱无章,那是因为ps命令(GNU ps)刻意集成了一些其他Unix系统的ps命令的功能,试图兼容其他系统。
查看自己的进程:
$ ps -ux

查看用户smith的所有进程:
$ ps -U smith

查看特定程序引发的所有进程:
$ ps -C program_name

查看终端N的进程:
$ ps -tN

查看特定进程1,2及3505:
$ ps -p1,2,3505

对所有进程连同命令行,截断其超出屏幕宽度的部分:
$ ps -ef

所有进程连同完整的命令行:

$ ps -efww

以缩排方式呈现所有进程的层次关系:
$ ps -efH

记住,可以用grep或其他过滤程序从ps的输出中提取特定的信息。
$ ps -ux | grep myprogram

uptime  stdin stdout -file --opt --help --versionuptime
uptime命令用于显示自上次启动后,系统运行了多长时间。
$ uptime

10:54pm up 8 days, 3:44, 3 users, load average: 0.89, 1.00, 2.15

自左至右,各字段的意义分别为:当前时间(10:54pm),系统运行时间(8 days,3hours,44minutes),当前登录的用户数(3),1分钟系统平均负载(0.89),5分钟系统平均负载(1.00),15分钟系统平均负载(2.15)。平均负载是单位时间段内活动进程的平均数。
w  stdin stdout -file --opt --help --versionw [username]
w命令用于显示每个已登录用户的每个shell的当前进程:
$ w
  10:51pm up 8 days, 3:42, 8 users,

load average: 0.00, 0.00, 0.00
USER     TTY    FROM  LOGIN@  IDLE   JCPU   PCPU   WHAT
barrett  pts/0  :0    Sat2pm  27:13m 0.07s  0.07s  emacs
jones    pts/1  host1 6Sep03  2:33m  0.74s  0.21s  bash
smith    pts/2  host2 6Sep03  0.00s  13.35s 0.04s  w

第一行是uptime显示的。其后是各栏信息的标题,分别代表登录用户名、用户终端、源主机或X界面(如有)、登录时间、挂起时间、两种CPU时间的测量值(详情请参阅man w)和当前进程。如果只想看特定用户的信息,请为w提供该用户名。
如果需要精简的输出,试试w-hfs。
常用选项
-h  不显示标题行。

-f  不显示FROM字段。
-s  不显示JCPU列和PCPU字段。
top  stdin stdout -file --opt --help --versiontop [options]
top命令用于监视最活跃的进程,并自动更新显示(比如每秒更新一次)。top是一个交互式的命令行程序,可以在屏幕上更新自己的显示。
$ top
94 processes: 81 sleeping, 1 running, 0 zombie, 11 stopped
CPU states: 1.1% user, 0.5% system, 0.0% nice, 4.5% idle
Mem: 523812K av, 502328K used, 21484K free, 0K shrd, ...

-dN  每N秒更新一次显示。
-pN-pM…  只显示PID为N,M,…(最多20个)的进程。
-c  显示进程的命令行参数。
-b  直接在标准输出上显示,不进行屏幕控制。可以使用top-b-n1>outfile将画面快照保存到文件中。
gnome-system-monitor stdin stdout-file--opt--help--versiongnome-system-monitor
gnome-system-monitor是一个图形工具,用于显示每个进程的系统负载、活动进程列表、存储器信息、文件系统信息及其他信息。

xload  stdin stdout -file --opt --help --versionxload
xload是X window环境下一个简单的监视工具,能够显示处理器负载(Y轴)与时间(X轴)的关系。如果你的系统是多处理器或多核的,xload将不能为每个处理器或核进行单独显示,只能使用更为强大的工具,诸如gnome-system-monitor等。
常用选项
-update N  每N秒更新一次显示(默认为10秒)。
-scale N  将Y轴N等分(默认为1)。负载增加时,xload将自动增加更多的划分。
-hl color  比例划分线以color颜色显示。
-label X  在图片上打印X字符串(默认为你的主机名)。

Linux内核尽可能地将内存用作缓存区,因此上述例子中,估计的空闲内存包含buffers/cache行,free栏(如,299000K)。
常用选项
-s N  连续运行,每N秒更新一次显示。
-b  以字节为单位显示。
-m  以兆字节为单位显示。
-t  在最后新增行显示总的统计信息。
-o  不显示“buffers/cache”行。

进程控制
kill  终止进程(或传送信号到某进程)。
nice  以特定的优先级启动程序。
renice  进程运行过程中改变其优先级。
进程启动后,可以被停止、重启、终止或者改变优先级。在第32页“shell任务控制”中已经讨论过部分操作,这里将讨论终止和改变优先级操作。
kill  stdin stdout -file --opt --help --versionkill [options] [process_ids]
kill命令可以发送信号给进程,可以终止(terminate)(默认操作)、中断(interrupt)、

$ ps -uax | grep emacs

或者,更好的方法是试试pidof命令,它依据进程的名字查找并打印出该进程的PID:
$ pidof  emacs
8374

现在,你即使只知道进程的名字,也可以在一条命令行中结束该进程:
$ kill `pidof emacs`

除了位于文件系统中的kill程序外(通常是/bin/kill),许多shell也内置kill命令,虽然两者语法和行为不尽相同。但两者都支持以下用法:
$ kill -N PID
$ kill -NAME PID

上面N是信号的数值,NAME是不含前缀“SIG”的信号名(比如,使用-HUP发送SIGHUP信号)。运行kill-l命令可以查看kill发送信号的完整列表。它的输出取决于是shell内置的kill,还是文件系统中的kill程序。
关于各种信号的说明,请参阅man 7 signal。
nice  stdin stdout -file --opt --help --versionnice [-level] command_line
当启动一个需要占用大量系统资源的程序时,你可以通过降低它的优先级,达到“善待”其他进程(或用户)的目的。nice命令的作用是为进程设置一个nice值(nice level),以便减少Linux进程调度器对它的关注。下面例子中,要求系统以优先级7来排序一个超大文件:
$ nice -7 sort VeryLargeFile > outfile

如果运行nice命令时没有指定优先级,则默认为10级。通常进程运行在0级,你可以通过运行不带参数的nice命令查看:
$ nice
0

superuser也可以降低nice级别,提升进程的优先级:
 # nice --10 myprogram

(没错,这是“dash负10”。)可以通过ps命令输出的“NI”列查看任务的nice级别:
$ ps -o pid,user,args,nice

renice  stdin stdout -file --opt --help --version

renice [+-N] [options]PID
nice命令可以让你按指定的优先级启动程序,而renice命令可以改变正在运行的进程的优先级。
下面的例子中,进程28734的nice级别增加(优先级降低)了5级:
$ renice +5 -p 28734

普通用户可以增加自己的进程nice级别,只有superuser可以降低(增加优先级)进程nice级别,并且可以对所有进程进行操作。级别的可用范围是−20至+20,但是要避免太小的负值,以免干扰关键的系统进程。
常用选项
-p pid  只影响给定PID的进程。也可以省略-p,只提供PID(如,renice+528734)。

-u username  影响给定用户的所有进程。这称为“优化”进程。也许你听过把它当做动词的说法:“进程优先级优化到12。”返回

 

 

Shell任务控制
jobs 列出所有运行的任务

& 将任务放到后台运行
^Z 暂停当前(前台)任务
suspend 暂停shell
fg 恢复任务,前台运行该任务
bg 将已暂停的任务放到后台运行
所有Linux的shell都具备任务控制的能力,即有能力在后台(后台多任务运行)或前台(实时现场)运行程序。任务只是shell的工作单位。交互运行命令时,shell将其视为任务,并进行记录。命令结束时,相关任务也就结束了。任务是比Linux进程更高一层次的概念。事实上,Linux OS对任务一无所知,任务仅是由shell进行控制的。

关于任务控制的几个重要术语介绍如下:

前台任务(Foreground job)
在shell中运行,任务完成前shell提示符不会出现,因而不能同时运行其他任务。后台任务(Background job)
在shell中运行,但不独占shell,任务完成前shell提示符就能出现,因而可以在同一个shell下同时运行其他任务。暂停(Suspend)
临时停止执行前台任务。恢复(Resume)
让暂停的任务继续执行。

jobs
内置命令jobs用于列出shell中正在运行的任务。
$ jobs
[1]- Running                emacs  myfile  &
[2]+ Stopped                su

左侧的数字是任务编号,+表示该任务默认是受fg(foreground,前台)和bg(background,后台)命令影响的。
&
命令行末尾加上&符号,表示要求shell将该命令放到后台执行。
$ emacs  myfile  &

[2] 28090

shell运行命令后,输出任务编号2和命令的进程ID:28090。然后立刻输出提示符,不管后台任务是否执行完毕。
^Z
前台任务正在运行时,按下^Z,该任务将被挂起。挂起的任务只是暂停运行,但是其状态会被继续记录。
$ mybigprogram
^Z
[1]+         Stopped                 mybigprogram
$

对于已挂起的任务mybigprogram,可以通过bg命令将其放到后台继续执行,也可以使用fg命令将其恢复到前台继续执行。
suspend
内置命令suspend的作用是暂停shell,就像对shell本身按下了^Z一样。例如,运行su命令进入另一个shell后,想回到原来的shell中,则可以运行以下命令:
$ whoami
smith
$ su  -l
Password: **************
# whoami
root

# suspend
[1]+         Stopped                 su
$ whoami
smith

bgbg [%jobnumber]
内置命令bg的作用是将挂起的任务放到后台运行。bg命令没有指定参数时,只对最近被挂起的任务起作用。要影响其他某个特定的任务时(可以通过命令jobs列出任务的详细参数),可以在该任务编号前加上百分号,比如:
$ bg         %2

某些交互式任务不能保持在后台运行,比如正在等待输入数据的任务。如果你尝试将其放到后台,shell将暂停该任务并显示:
[2]+         Stopped  command  line  here

这时候可用fg将任务放到前台继续运行。
fgfg [%jobnumber]
内置命令fg的作用是将挂起或后台运行的任务放到前台运行。没有指定参数时,fg将自动选择一个任务,通常是最近挂起的任务或者最近放到后台运行的任务。要影响其他某个特定的任务时(可以通过命令jobs列出任务的详细参数),可在该任务编号前加上百分号,比如:
$ fg         %2

 

结束运行中的命令
如果你在shell中启动了一个命令,但是随后希望能立即停止该命令,这时可以按^C。shell会将^C解读为“立即终止当前的前台命令”。因此,在浏览非常长的文件(比如使用cat命令)过程中,可以按^C停止显示:
$ cat  bigfile
This is a very long file with many lines. Blah  blah  blah
blah  blah  blah  blah blah blah  ^C
$

要终止后台运行的程序,可以先用fg命令将其放到前台,然后再按下^C;或者,使用kill命令终止它运行(参见第117页“进程控制”)。
通过按^C来终止程序是一种不太友好的方式。如果程序自身有退出的方法,那就应该尽可能

通过按^C来终止程序是一种不太友好的方式。如果程序自身有退出的方法,那就应该尽可能去使用。
程序终止之后的清理
使用^C终止程序可能会使shell处于一种奇怪的状态,比如屏幕显示的不是你输入的字符,而是其他的东西。这是由于程序被终止后,没有机会清理自身。发生这种现象时,可以按以下步骤解决问题:
1.按^J使shell输出提示符。这和Enter键(换行)的作用一样,但在Enter键失效时还可以使用。
2.输入reset命令(即使在你输入时它没有显示,也照样输入),然后再次按下^J,运行该命令。这将让shell回到正常状态。
^C仅在shell环境下才起作用,非shell窗口内按^C是不起作用的。而且,有些程序会拦截^C并忽略,比如文本编辑器emacs。

结束shell
终止shell运行的方法有两个:执行exit命令或按^D:
$ exit

配置shell
为了使shell按照某种特定方式运行,需要对用户目录下的.bash_profile文件和.bashrc文件进行配置。这两个文件都是shell脚本程序(即包含shell命令的可执行文件,详见第187页“shell脚本编程”),每次你登录到系统时,~/.bash_profile都会自动执行;当shell被打开时,~/.bashrc也会自动执行。在这两个文件中,你可以设置变量和别名、运行程序、输出你的星座,或者其他任何你想做的事情。
以上是对Linux和shell的总体介绍,后面的内容将转入Linux命令,会罗列并解释最常用的那些命令,包括文件操作、进程管理、用户操作、网络、多媒体等相关的命令。

 

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值