目录
一、不挂断的后台运行命令
运行.sh文件
直接用./sh 文件就可以运行,但是如果想后台运行,即使关闭当前的终端也可以运行的话,需要nohup命令和&命令。
1.nohup
不挂断的运行命令
如果让程序始终在后台执行,即使关闭当前的终端也执行(之前的&做不到),这时候需要nohup。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。关闭中断后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)
ps -aux | grep "test.sh" #a:显示所有程序 u:以用户为主的格式来显示 x:显示所有程序,不以终端机来区分
语法:nohup Command [ Arg … ] [ & ]
nohup ./bin/storm nimbus
2.&
加在一个命令后,可以把这个命令放在后台运行如gftp &,
例如:
watch -n 10 sh test.sh & #每10s在后台执行一次test.sh脚本
3 &和nohup区别
command & 是后台运行 Ctrl + C后程序不停止运行,关闭shell会话后或者其他原因导致shell会话退出 程序停止运行
nohup command ,shell会话退出后,程序不停止运行,Ctrl+C程序停止运行
nohup ./sh &
这样执行脚本很危险,shell关闭后,jobs发现不了,只能查找pid,利用kill终止
ps
ps aux | grep "./sh"
此时要退出只能使用【kill】命令关掉该进程:
kill -9 进程号
-9:表示kill信号,无法抓取,无法忽略,意思是“城管来了,小摊儿必须撤”
二、查看后台运行命令
1.jobs
查看当前终端后台运行命令 ,终端关闭后无法查看。
jobs -l选项可显示当前终端所有任务的PID,jobs的状态可以是running,stopped,Terminated。
+ 号表示当前任务,- 号表示后一个任务。
2.ps
查看当前的进程。
输出列的含义:
- F 代表这个程序的旗标 (flag), 4 代表使用者为 super user
- S 代表这个程序的状态 (STAT)
- UID 程序被该 UID 所拥有
- PID 进程的ID
- PPID 则是其上级父程序的ID
- C CPU 使用的资源百分比
- PRI 这个是 Priority (优先执行序) 的缩写
- NI 这个是 Nice 值
- ADDR 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 “-“
- SZ 使用掉的内存大小
- WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作
- TTY 登入者的终端机位置
- TIME 使用掉的 CPU 时间。
- CMD 所下达的指令为何
ps -A: 查看所有进程信息
[root@localhost test6]# ps -A
PID TTY TIME CMD
1 ? 00:00:00 init
2 ? 00:00:01 migration/0
3 ? 00:00:00 ksoftirqd/0
4 ? 00:00:01 migration/1
ps -u root:查看指定用户信息
ps -ef:显示所有进程信息,连同命令行
[root@localhost test6]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Nov02 ? 00:00:00 init [3]
root 2 1 0 Nov02 ? 00:00:01 [migration/0]
root 3 1 0 Nov02 ? 00:00:00 [ksoftirqd/0]
ps aux:列出所有目前正在内存中的程序。
[root@localhost test6]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 10368 676 ? Ss Nov02 0:00 init [3]
root 2 0.0 0.0 0 0 ? S< Nov02 0:01 [migration/0]
三 后台程序管理
1 关闭当前后台运行的命令
kill命令:结束进程
(1)通过jobs命令查看jobnum,然后执行 kill %jobnum
(2)通过ps命令查看进程号PID,然后执行 kill %PID
如果是前台进程的话,直接执行 Ctrl+c 就可以终止了
2 前后台进程的切换与控制
(1)fg命令
功能:将后台中的命令调至前台继续运行
如果后台中有多个命令,可以先用jobs查看jobnun,然后用 fg %jobnum 将选中的命令调出。
(2)Ctrl + z 命令
功能:将一个正在前台执行的命令放到后台,并且处于暂停状态
(3)bg命令
功能:将一个在后台暂停的命令,变成在后台继续执行
如果后台中有多个命令,可以先用jobs查看jobnum,然后用 bg %jobnum 将选中的命令调出继续执行。2
3 示例操作
$ ctrl+z 将当前运行的进程放入后台暂停
$ jobs ##列出后台进程
[1]+ 已停止 putty
$ fg %1 #取出后台进程放入前台运行,%后面加进程序号
$ bg %1 ##将程序放入后台,继续执行
[1]+ putty & ##程序在后台执行
$ kill -9 %1 ##强制杀死后台程序
$ xkill #通过点击鼠标结束相应程序
后台运行,如果不想看到控制台打印日志可以:./test_nohup -t 2 > ./back_ground.txt 2>&1 &
0:标注输入,1:标准输出,2:标准错误输出
输出重定向到文件
意思标准输出重定向到文件‘back_ground.txt’中,【2>&1】意思是将标准错误输出重定向到标准输出,因为标准错误输出是没有缓冲区的而标准输出有,并且如果实时输出到文件中要【flush】输出缓冲区,否则未达到缓冲区大小时是不会输出到文件的。
如果不需要输出文件,则可以:./test_nohup -t 2 > /dev/null 2>&1 &
将所有输出重定向到【/dev/null】这个‘空’设备文件,它会丢弃写入的内容,就感觉任何东西都被“宇宙黑洞”吞噬了一样。。。
嗯,是的,你可以跟【nohup】组合。。。
like this...:nohup ./test_nohup -t 2 > /dev/null 2>&1 &
,这样关闭‘窗口’程序依然在后台运行