如果让程序始终在后台执行,即使关闭当前的终端也执行(之前的&做不到),这时候需要nohup。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。关闭中断后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)
nohup ./sh &
这样执行脚本很危险,shell关闭后,jobs发现不了,只能查找pid,利用kill终止
ps aux | grep "./sh"
此时要退出只能使用
【kill】
命令关掉该进程:
kill -9 进程号
-9:表示
kill信号
,无法抓取,无法忽略,意思是“城管来了,小摊儿必须撤”
二、查看后台运行命令
1.jobs
查看当前终端后台运行命令 ,终端关闭后无法查看。
jobs -l选项可显示当前终端所有任务的PID,jobs的状态可以是running,stopped,Terminated。
+ 号表示当前任务,- 号表示后一个任务。
查看当前的进程。
输出列的含义:
-
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 &
,这样关闭‘窗口’程序依然在后台运行
有关后台进程管理的几个操作$ ctrl+z 将当前运行的进程放入后台暂停$ jobs ##列出后台进程[1]+ 已停止 putty$ fg %1 #取出后台进程放入前台运行,%后面加进程序号$ bg %1 ##将程序放入后台,继续执行[1]+ putty & ##程序在后台执行$ kill -9 %1 ##强制杀死后台程序$ xki...
加在一个命令的最后,可以把这个命令放到
后台
执行,
关闭
当前终端后停止运行。
nohup
如果让程序始终在
后台
执行,即使
关闭
当前的终端也执行(之前的&做不到),这时候需要nohup。该命令可以在你退出帐户/
关闭
终端之后继续运行相应的
进程
。
关闭
中断后,在另一个终端jobs已经无法看到
后台
跑得程序了,此时利用ps(
进程
查看
命令)
只需在要处理的命令前加上 nohu...
一、为什么要使程序在
后台
执行
我们计算的程序都是周期很长的,通常要几个小时甚至一个星期。我们用的环境是用putty远程连接到日本
Linux
服务器。所以使程序在
后台
跑有以下三个好处:
1:我们这边是否关机不影响日本那边的程序运行。(不会像以前那样,我们这网络一断开,或一关机,程序就断掉或找不到数据,跑了几天的程序只能重头再来,很是烦恼)
2:不影响计算效率
2:让程序在
后台
跑后,不会
直接用./sh 文件就可以运行,但是如果想
后台运行
,即使
关闭
当前的终端也可以运行的话,需要nohup命令和&命令。
&命令:加在一个命令的最后,可以把这个命令放在
后台
执行
nohup命令:不挂断的运行命令
1. 使用命令ps -ef | grep "
后台任务
名称"来
查看
指定
后台任务
的
进程
信息。
2. 使用命令top来
查看
系统中所有
进程
的信息,包括
后台任务
。
3. 使用命令jobs来
查看
当前终端中的
后台任务
。
4. 使用命令nohup来启动
后台任务
,使其在
后台运行
,并将输出重定向到指定文件中,方便
查看
任务运行情况。
5. 使用命令systemctl来
查看
系统中正在运行的服务,包括
后台任务
。