linux上的进程查看及管理工具:
pstree,ps,pidof,pgrep,top,htop,glances,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup,nice,renice,killall。。。
linux开机时,会启动第一个进程,由这个进程去启动别的进程,这个第一个进程在centos5,6,7上实现的都不一样。
- centos5:Sysv init:串行通过脚本去启动别的进程,速度慢
- centos6:upstart:参考ubuntu的upstart,并行启动脚本,速度快
- centos7:systemd:参考mac启动的过程,速度更快
这个第一个进程:/sbin/init
在centos7上执行pstree:可以看到父进程是systemd
# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─2*[VBoxClient───VBoxClient]
├─2*[VBoxClient───VBoxClient───{VBoxClient}]
├─VBoxClient───VBoxClient───2*[{VBoxClient}]
├─VBoxService───7*[{VBoxService}]
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
ps命令:显示当前时间点进程的状态
ps命令为什么能知道所有进程的状态呢?我们知道进程是由内核管理的。每个进程对应内核来说,就是某个变量,内核把这个变量的信息存放在/proc/进程ip/目录下,ps命令就是读这些目录下的文件,来取得所有进程的状态的。
内核参数:linux哲学是一切皆文件,所以内核参数也是文件。
- 可设置其参数值,而改变内核的允许特性的参数存放在:/proc/sys目录下。
- 状态变量:用于保存内核中的所有进程的信息,仅用于查看,存放在:/proc/进程id目录下。
查看/proc/1下的文件(也就是1号进程,也就是systemd进程),每个文件存放的是内核参数的值
# pwd
/proc/1
# ls
attr cmdline environ io mem ns pagemap sched stack task
autogroup comm exe limits mountinfo numa_maps patch_state schedstat stat timers
auxv coredump_filter fd loginuid mounts oom_adj personality sessionid statm uid_map
cgroup cpuset fdinfo map_files mountstats oom_score projid_map setgroups status wchan
clear_refs cwd gid_map maps net oom_score_adj root smaps syscall
查看文件comm的内容:发现是启动1号进程的命令。
# cat comm
systemd
查看文件maps的内容:
此进程使用的堆(heap)所占用的内容空间是:55f9ef4c6000-55f9ef643000
此进程使用的栈(stack)所占用的内容空间是:7ffd27f9e000-7ffd27fbf000
此进程使用的动态库(/usr/lib64/ld-2.17.so)所占用的内容空间是:7f13ece84000-7f13ece85000
# cat maps
55f9ed91b000-55f9eda7c000 r-xp 00000000 fd:00 67757678 /usr/lib/systemd/systemd
55f9ef4c6000-55f9ef643000 rw-p 00000000 00:00 0 [heap]
7f13ea4ac000-7f13ea4b0000 r-xp 00000000 fd:00 33700674 /usr/lib64/libuuid.so.1.3.0
7f13ece84000-7f13ece85000 rw-p 00022000 fd:00 33637191 /usr/lib64/ld-2.17.so
7ffd27f9e000-7ffd27fbf000 rw-p 00000000 00:00 0 [stack]
直接用cat等命令去看文件里的内容太累了,所以有了各种各样的工具来帮助人去查看这些信息,ps就是其中的一个。
进程启动的方式:
- 系统启动时,自动启动的:与终端无关
- 用户通过终端启动:与终端有关
ps常用选项:
查看与终端有关的进程:a
TTY:终端设备号
TIME:占用cpu的时间总和
# ps a PID TTY STAT TIME COMMAND 5705 pts/0 Ss+ 0:00 bash 5901 pts/1 Ss+ 0:00 bash 5961 pts/2 Ss 0:00 bash 6062 pts/2 S 0:00 su - root 6073 pts/2 S+ 0:00 -bash 6171 pts/3 Ss 0:00 -bash 14173 pts/3 R+ 0:00 ps a
查看与终端无关的进程:x
由于与终端无关,所以TTY出没有终端设备号
COMMAND:这个进程是由那个程序启动的。由中括号的,是内核启动的线程
# ps x PID TTY STAT TIME COMMAND 2 ? S 0:00 [kthreadd] 3 ? S 0:00 [ksoftirqd/0] 5 ? S< 0:00 [kworker/0:0H] 3793 ? Ssl 0:00 /usr/sbin/libvirtd
显示所有进程:
ps ax
以用户的角度显示进程的信息:u
所有aux经常一起使用,显示的结果是以列PID排序的。
USER:启动进程的user
PID:进程号
%CPU:累计cpu使用时间
%MEM:使用内存比率
VSZ:占用的虚拟内存大小
RSS:常驻内存大小(不能放到swap和磁盘上的关键内容)
STAT:进程的状态
R:running(运行中)
S:interruptable sleeping(休眠中,但可以被唤醒)
D:unterruptable sleeping(休眠中,但不可以被唤醒)
T:Stoped(停止了)
Z:zombie(僵尸进程,父亲进程没有回收它)。
+:前台进程
l:启动了多线程的进程
N:低优先级进程
<:高优先级进程
s:session leader:在bash里运行了很多别的线程,所有bash就成了session leader;所以只要结束了session leader进程,则在它里面启动的进程就全被结束掉。
Ss 08:05 0:00 -bash
START:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 128272 6928 ? Ss 08:00 0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 2 0.0 0.0 0 0 ? S 08:00 0:00 [kthreadd] root 13 0.0 0.0 0 0 ? S 08:00 0:00 [kdevtmpfs] root 14 0.0 0.0 0 0 ? S< 08:00 0:00 [netns] root 15 0.0 0.0 0 0 ? S 08:00 0:00 [khungtaskd] dbus 3048 0.0 0.1 70204 4328 ? Ssl 08:00 0:05 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation rpc 3049 0.0 0.0 73648 1380 ? Ss 08:00 0:00 /sbin/rpcbind -w avahi 3068 0.0 0.0 62144 400 ? S 08:00 0:00 avahi-daemon: chroot helper libstor+ 3069 0.0 0.0 8576 824 ? Ss 08:00 0:00 /usr/bin/lsmd -d ys 4771 0.0 0.0 317316 3880 ? Sl 08:01 0:00 /usr/bin/gnome-keyring-daemon --daemonize --login gdm 4779 0.0 0.1 452196 4236 ? Sl 08:01 0:00 ibus-daemon --xim --panel disable gdm 4782 0.0 0.0 375868 3524 ? Sl 08:01 0:00 /usr/libexec/ibus-dconf ys 4788 0.0 0.2 818940 9444 ? Ssl 08:01 0:00 /usr/libexec/gnome-session-binary --session gnome-classic gdm 4789 0.0 0.3 464772 13420 ? Sl 08:01 0:00 /usr/libexec/ibus-x11 --kill-daemon ys 4804 0.0 0.0 59024 968 ? S 08:01 0:00 dbus-launch --sh-syntax --exit-with-session
显示所有进程:-e
带-的是BSD风格的选项,不带-的是UNIX的风格。
# ps -e PID TTY TIME CMD 1 ? 00:00:03 systemd 2 ? 00:00:00 kthreadd 3 ? 00:00:00 ksoftirqd/0 5 ? 00:00:00 kworker/0:0H 7 ? 00:00:00 migration/0
和-e一起使用的还有-f:显示详细信息
PPID:父进程
C:CPU占用的百分比
STIME:运行启动的时间
TIME:累计CPU运行时间
# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 08:00 ? 00:00:04 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 2 0 0 08:00 ? 00:00:00 [kthreadd]
还有个-F和-f类似
PSR:运行在那个cpu核心上。
# ps -eF UID PID PPID C SZ RSS PSR STIME TTY TIME CMD root 1 0 0 32068 6928 0 08:00 ? 00:00:04 /usr/lib/systemd/systemd --switched-root --system --deserialize root 2 0 0 0 0 0 08:00 ? 00:00:00 [kthreadd] root 3 2 0 0 0 0 08:00 ? 00:00:00 [ksoftirqd/0]
按父,子进程层级方式显示:-H
# ps -eFH UID PID PPID C SZ RSS PSR STIME TTY TIME CMD gdm 4779 1 0 113049 4236 0 08:01 ? 00:00:00 ibus-daemon --xim --panel disable gdm 4782 4779 0 93967 3524 0 08:01 ? 00:00:00 /usr/libexec/ibus-dconf
自定义要显示的列。列于列之间用逗号分隔:o
# ps axo pid,command PID COMMAND 1 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
BSD风格:ps -eo
# ps -eo pid,command | head -3 PID COMMAND 1 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 2 [kthreadd]
常用列:pid,ni(nice),priority(优先级),psr(运行在哪个核心上),pcpu(cpu的利用率),stat(状态),comm(启动的程序),tty(跟哪个终端相关),ppid(父进程id),rtprio(实时优先级)
nice:取值是-20到19,值越小优先级越高。作用是把自己的优先级降低(普通用户不能提高自己的优先级),让别的进程先执行,很礼让,所有叫nice。但管理员可以提高进程的优先级。
pgrep,pkill命令
pgrep:根据进程的各个列的值,挑选出想查看哪些进程的信息。
pkill:根据进程的各个列的值,挑选出想给哪些进程发信号。
常用选项:
根据effictive user去查看进程:-u uid(或者用户名)
根据实际user去查看进程:-U uid(或者用户名)
# pgrep -U postfix 4322 14862 # id postfix uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail) # pgrep -U 89 4322 14862 # pgrep -u postfix 4322 14862 [root@localhost 1]# pgrep -u 89 4322 14862
根据terminal查看进程:-t
显示进程名:-l
# pgrep -lU postfix 4322 qmgr 14862 pickup
显示完整格式的进程名:-a
# pgrep -aU postfix 4322 qmgr -l -t unix -u 14862 pickup -l -t unix -u
显示其进程号下面的子进程:-P
root 3781 1 0 28189 4312 0 08:01 ? 00:00:00 /usr/sbin/sshd -D root 6163 3781 0 41301 6116 0 08:05 ? 00:00:00 sshd: root@pts/3 # pgrep -aP 3781 6163 sshd: root@pts/3
根据字符串去查看ps出来的结果:
ps key
查看有【ssh】字样的进程。
# pgrep ssh -a 3781 /usr/sbin/sshd -D 5023 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic" 6163 sshd: root@pts/3
ps nginx
;ps httpd
等
pidof命令
根据进程名字,找到pid。
# pidof sshd
6163 3781
top命令
类似windows的任务查看器,动态变化。
不带参数top,是按CPU列逆序排序,占用cpu最高的进程在最上面。
# top
top - 15:55:33(当前时间) up 7:54(运行时长), 5 users(登录的用户数), load average(平均负载,等待运行的队列长度): 0.00(1分钟), 0.01(5分钟), 0.05(15分钟)
Tasks(多少个进程): 231 total, 3 running, 228 sleeping, 0 stopped, 0 zombie
%Cpu(s)(cpu占用百分比): 0.3 us(用户空间的进程占cpu的百分比), 0.7 sy(内核空间的进程占cpu的百分比), 0.0 ni(调整nice的百分比), 99.0 id(空闲百分比), 0.0 wa(等待io的百分比), 0.0 hi(处理硬件终端的百分比), 0.0 si(处理软件终端的百分比), 0.0 st(被虚拟化软件进程偷走的百分比)
KiB Mem(物理内存) : 3880620 total, 2183580 free, 737500 used, 959540 buff/cache(缓冲/缓存)
KiB Swap(交换分区): 4063228 total, 4063228 free, 0 used. 2813008 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5078 ys 20 0 3025948 199132 68308 R 1.7 5.1 10:32.60 gnome-shell
1524 root 20 0 0 0 0 S 0.3 0.0 0:10.56 xfsaild/dm-0
uptime
命令能显示top命令结果的第一行:
# uptime
16:38:27 up 8:37, 5 users, load average: 0.07, 0.04, 0.05
VIRT:虚拟内存集;RES:常驻内存集;SHR:共享内存空间;S:当前状态;TIME+:运行时长
默认是按照%CPU列逆序排序的,可以改变排序的列:
- 按内存排序:交互输入M
- 按CPU排序:交互输入T
- 按执行时长排序:交互输入T
在TOP执行时,可以交互输入的命令列表:
h:显示帮助
l,t,m :显示/非显示第一行,第二行,第三行
d or s:调整刷新间隔
k:杀死指定的进程
q:退出top
Z,B,E,e Global: 'Z' colors; 'B' bold; 'E'/'e' summary/task memory scale
l,t,m Toggle Summary: 'l' load avg; 't' task/cpu stats; 'm' memory info
0,1,2,3,I Toggle: '0' zeros; '1/2/3' cpus or numa node views; 'I' Irix mode
f,F,X Fields: 'f'/'F' add/remove/order/sort; 'X' increase fixed-width
L,&,<,> . Locate: 'L'/'&' find/again; Move sort column: '<'/'>' left/right
R,H,V,J . Toggle: 'R' Sort; 'H' Threads; 'V' Forest view; 'J' Num justify
c,i,S,j . Toggle: 'c' Cmd name/line; 'i' Idle; 'S' Time; 'j' Str justify
x,y . Toggle highlights: 'x' sort field; 'y' running tasks
z,b . Toggle: 'z' color/mono; 'b' bold/reverse (only if 'x' or 'y')
u,U,o,O . Filter by: 'u'/'U' effective/any user; 'o'/'O' other criteria
n,#,^O . Set: 'n'/'#' max tasks displayed; Show: Ctrl+'O' other filter(s)
C,... . Toggle scroll coordinates msg for: up,down,left,right,home,end
k,r Manipulate tasks: 'k' kill; 'r' renice
d or s Set update interval
W,Y Write configuration file 'W'; Inspect other output 'Y'
q Quit
top命令的常用选项:
- 指定刷新时间的间隔:-d #
- 以批次方式显示:-b
- 显示多少批次后就退出top命令:-n #
以批次方式显示,显示2批次后,自动退出top,刷新间隔是1秒。
# top -b -n 2 -d 1
htop命令
top命令的升级版,在默认repo里没有,在epel里。
选项和top基本相同。
子命令:大部分和top相同,下面几个是htop独有的。
F1获取子命令的帮助信息。
- 查看某个进程打开的所有文件:l(小写L)
- 查看某个进程发起的系统调用都有哪些:s
- 此父子层级方式显示:t或F5
- 将选定的进程绑定到某几个cpu核心上:a。(进程默认是可以运行在任意核心上的)
vmstat命令
vmstat [options][delay [count]]
查看内存的统计数据
delay:控制每几秒种显示一次
count:显示几次
每2秒种显示一次,一共显示3次:
# vmstat 2 3
查看一次就退出:
# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 2254396 3148 954228 0 0 145 16 88 90 1 1 98 0 0
procs:进程个数
- r:等待运行的进程个数;cpu上等待运行的任务队列的长度
- b:处于不可中断睡眠状态的进程的个数;被阻塞的任务队列的长度。
memory:
- swpd:交换内存的使用量。这里如果是0,说明物理内存够用,说明处于健康状态;如果这里的值过大,就说明物理内存严重不足。spwd是利用磁盘模拟内存,所以速度非常慢。
- free:空闲的物理内存总量。
- buff:用于buffer的内存总量
- cache:用于cache的内存总量
swap:
- si:数据从物理内存进入swap的速率(单位:kb/s)
- so:数据从swap离开,返回到物理内存的速率(单位:kb/s)
可以通过swpd和swap的so来判断当前物理内存是否够用:如果swpd里有值,而且so的值很大,则说明物理内存不够,频繁需要从swap换进换出;如果swpd里有值,而so的值不大,则还可以忍受。
io:
- bi:从块设备读入系统的速率(单位:kb/s)
- bo:保存数据到块设备的速率(单位:kb/s)
system:
- in:interrupts,中断产生的速率(每秒产生多少个中断)
- cs:context switch:进程来回切换的速率。如果此值过万,则说明要运行的进程过多,cpu处理不过来了,需要加cpu。
cpu:
- us(user space):用户空间的进程使用cpu的百分比
- sy(system): 内核空间的进程使用cpu的百分比
- id(idle): cpu处于空闲时间的百分比
- wa(wait): 等待io完成的cpu百分比
- st(stolen):被虚拟化技术偷走的时间百分比
常用选项:
查看内存使用的汇总信息:-s
# vmstat -s 3880164 K total memory 707772 K used memory 861212 K active memory 523236 K inactive memory 2164936 K free memory 3148 K buffer memory 1004308 K swap cache 4063228 K total swap 0 K used swap 4063228 K free swap 4633 non-nice user cpu ticks 3335 nice user cpu ticks 4878 system cpu ticks 1343696 idle cpu ticks 576 IO-wait cpu ticks 0 IRQ cpu ticks 353 softirq cpu ticks 0 stolen cpu ticks 941197 pages paged in 112819 pages paged out 0 pages swapped in 0 pages swapped out 763048 interrupts 860345 CPU context switches 1582090142 boot time 17373 forks
pmap命令
显示指定进程的内存映射表
pmap [options] pid [...]
pmap pid=cat /proc/pid/maps
常用选项:
显示详细信息:-x
RSS:常驻内存大小
Dirty:脏数据大小
Mode:读,写,执行的权限
# pmap -x 1 1: /usr/lib/systemd/systemd --switched-root --system --deserialize 22 Address Kbytes RSS Dirty Mode Mapping 000055bb2ebd1000 1412 1168 0 r-x-- systemd 000055bb2ef31000 140 132 132 r---- systemd 000055bb2ef54000 4 4 4 rw--- systemd 000055bb2f8fb000 1520 1464 1464 rw--- [ anon ] 00007f173c000000 164 12 12 rw--- [ anon ] 00007f173c029000 65372 0 0 ----- [ anon ] 00007f1744000000 164 12 12 rw--- [ anon ] 00007f1744029000 65372 0 0 ----- [ anon ] 00007f174aeb2000 4 0 0 ----- [ anon ] 00007f174aeb3000 8192 8 8 rw--- [ anon ] 00007f174b6b3000 4 0 0 ----- [ anon ] 00007f174b6b4000 9024 840 840 rw--- [ anon ] 00007f174c11c000 16 8 0 r-x-- libuuid.so.1.3.0 00007f174c120000 2044 0 0 ----- libuuid.so.1.3.0
glances命令
用python研发的命令,在base仓库里没有,在epel里。
和top和htop差不多。
特点是支持c/s模式:可以在没有server的登录用户时,使用这种方式,监视server的各种信息。
server端:glances -s -B 本机某个网卡的ip地址
client端:glances -c 服务器的ip地址
dstat命令
需要安装,在base仓库里。
功能很强大,上面命令能查看的,dstat基本都能查看。
# dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
不使用任何参数就是使用:-cdngy
c:total-cpu-usage;d:dsk/total;n:net/total;g:paging;y:system
查看tcp各种状态下的连接的数量:
# dstat --tcp ----tcp-sockets---- lis act syn tim clo 13 1 0 0 0
查看最消耗cpu的进程是谁:--top-cpu
# dstat --top-cpu -most-expensive- cpu process VBoxClient 0.0 VBoxlient 0.2
查看最消耗磁盘io的进程是谁:--top-bio
# dstat --top-bio ----most-expensive---- block i/o process systemd 36k 18k
查看最消耗内存的进程是谁:--top-mem
# dstat --top-mem --most-expensive- memory process gnome-shell 192M
延迟最大的进程是谁:--top-latency
# dstat --top-latency --highest-total-- latency process rcu_sched 292 ksoftirqd/2 9115
还有很多类似--top-xxx的选项
--tcp,--udp,--raw,--socket,--ipc
kill命令
给进程发送信号。
有3种办法标识信号:
1,信号的数字标识
2,信号的完整名称:SIGHUP
3,信号的简写名称:HUP
查看有哪些信号:-l
# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 # kill -l 1 HUP # kill -l 2 INT
发送信号方法:
# kill -1 pid # kill -SIGHUP pid # kill -HUP pid
常用信号解释:
1)SIGHUP:无需关闭进程,让其从新读配置文件
2)SIGINT:终止正在运行的进程,相当于ctrl+c
9)SIGKILL:立即无条件终止正在运行的进程
15)SIGTERM:终止正在运行的进程。(进程打开的文件描述符等,关闭后,在结束自己)
18)SIGCONT:让后台运行的进程,回到前台运行。
19)SIGSTOP:让前台的进程去后台运行。
killall命令
根据进程的名字,终止进程,所以符合名字的进程都会被终止。
# killall httpd
调整进程运行的优先级
通过调整进程的nice值调整进程的优先级。只要管理员能调低nice值。
nice:取值是-20到19,值越小优先级越高。
用户空间的进程的优先级范围是:100~139,对应nice值-20~19。也就是说nice为-20的进程的优先级是100。优先级数字越小则越优先,niec值越小则越优先。
进程启动时,nice值是0,所以优先级是120.可以在启动时修改进程的nice值:
显示的15,其实是115,把前面的1省略了。
# nice -n -5 htop
# ps axo pid,priority,ni,comm | grep 344
344 15 -5 htop
进程启动后,也可以修改其nice:renice -n NICE pid ...
显示的20,其实是120,把前面的1省略了。
# ps axo pid,priority,ni,comm | grep 344
344 15 -5 htop
# renice -n 0 344
344 (process ID) old priority -5, new priority 0
# ps axo pid,priority,ni,comm | grep 344
344 20 0 htop
Linux 系统作业控制
系统作业也叫job。
前台作业:通过终端启动,且启动后一直占据终端。
后台作业:可以通过终端启动,但启动后转入后台运行,释放终端。
那么如何让作业,转入后台呢?
运行中的作业:输入ctrl+z之后,作业转入后台,但不是运行状态,而是停止状态。
尚未启动的作业:
command &
这种方法虽然能让作业进入后台运行,但依然依附于终端,一旦终端被终止,它也被终止了。
尚未启动的作业:
nohup command &
让作业进入后台运行,且脱离终端。即使终端被终止,它也不会被终止。
查看后台的所有作业:jobs
那么如何让转入后台的作业,返回到前台终端呢?
fg 作业号
,就让指定的作业号的作业恢复到前台运行。
直接执行fg,则是让有加号的作业恢复到前台执行
# jobs
[1] Stopped htop
[2]- Stopped top
[3]+ Stopped dstat
# fg 1#回复htop命令到前台执行