继续下一章。。。
发现了一个好东东。就是前后台的切换。例如我们现在要vim一个文件。然后又要查找一些命令的时候,以前不知道,都是退出后,查完了,在vim进入。现在我们可以将该vim拿到后台,然后查完了再唤醒vim。。。。很爽。OK,看程序
[root@localhost ~]# vim ~/.bashrc 按下ctrl+z,将vim置于后台,然后再执行一个命令 [root@localhost ~]# find / -print 再按下ctrl+z,继续置于后台中 [root@localhost ~]# jobs -l 查找后台运行的进程 [1]+ 65226 停止 vim ~/.bashrc # +号表示的是排序,意思当我们fg而不确定指向前台运行哪个命令的时候,默认的都是最后退出的命令 [2]- 66139 停止 find / -print [root@localhost ~]# fg 它默认就会进入 带加号的那个程式,也就是VIM 当我们要明确进入哪个程式的时候,就可以 [root@localhost ~]# fg %1 强行执行第一个程式
上面就是前后台切换的命令。就几点,ctrl+z将命令置于后台 jobs -l查询后台运行的进程 fg 默认启用最后退出的进程 fg %数字 启用指定的进程
jobs 命令的参数详解
上面介绍了,前后台切换,那如果想让某个进程在后台运行的话,需要怎么操作呢?
启用bg命令
[root@localhost ~]# find / -perm /7000 > /tmp/text.txt find: ‘/proc/6971/task/6971/fdinfo/12’: 没有那个文件或目录 find: ‘/proc/6983/task/7056/fdinfo/8’: 没有那个文件或目录 ^Z [3]+ 已停止 find / -perm /7000 > /tmp/text.txt [root@localhost ~]# jobs [1]- 已停止 vim ~/.bashrc [2] 已停止 find / -print [3]+ 已停止 find / -perm /7000 > /tmp/text.txt #ctrl+z,他是停止的 [root@localhost ~]# jobs ; bg %3 ; jobs 当我们bg %3 在后台执行3的时候 [1]- 已停止 vim ~/.bashrc [2] 已停止 find / -print [3]+ 已停止 find / -perm /7000 > /tmp/text.txt [3]+ find / -perm /7000 > /tmp/text.txt & [1]+ 已停止 vim ~/.bashrc [2] 已停止 find / -print [3]- 运行中 find / -perm /7000 > /tmp/text.txt & #他开始在后台执行,前面有个运行中,还有就是最后的 & 符号
Kill命令
脱机管理问题
当你远程连接Linux进行工作时,如果你操作命令,在后台运行的时候ctrl+c,这时候如果你因为某些原因脱机了,那么你的工作将会被中断。因为,我们在此操作的时候,指的是工作环境下的前台和后台,而非进程内的后台服务。
而如果要实现真正的后台运行,则需要用at服务来运行,或者用nohup来执行
nohub执行的是命令。也就是启用一个线程来执行相关命令。这个命令就是一个脚本命令,而非像上面在工作目录中,直接在bash中内建的命令。有点拗口。。。
说白了,at,nohub就是启用新线程执行命令服务。
上文提到的ctrl+z等的前后台切换,是在bash命令中进行的前后切换。
既然如此,如果你注销或者退出,则bash命令也会随之退出。所以命令就会停止执行。但是如果用at,nohub服务来执行,那你退出,线程依然是在开启的,程序就不会退出执行。
一个是基础工作环境的bash,一个是基于后台线程的服务。
运用nohub,首先需要建立一个一个sh的shell脚本。然后才能用nohup 来执行该脚本。前后台的区别就在于&符号
为了验证,你可以退出后再登入,利用pstree -up查找
表明确实达到了要求,kill杀死这个进程 14599
进程观察 ps top pstree
[root@localhost ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 14620 14616 0 80 0 - 29164 do_wai pts/1 00:00:00 bash 0 R 0 15401 14620 0 80 0 - 38309 - pts/1 00:00:00 ps
top 动态观察进程变化 就是任务管理器
top -d 2
2秒观察进程信息
查看某个进程的情况,可以利用$$来找出自己的bash的PID的值,然后top 一下
[root@localhost ~]# echo $$ 14620 [root@localhost ~]# top -d 2 -p 14620
这就是这个进程的相关信息
pstree
找出目前系统上已在监听的网络联机及其PID
[root@localhost ~]# netstat -tulnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN 8138/X tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 8598/dnsmasq tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 7675/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 7677/cupsd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 8037/master tcp6 0 0 :::111 :::* LISTEN 1/systemd tcp6 0 0 :::6000 :::* LISTEN 8138/X tcp6 0 0 :::22 :::* LISTEN 7675/sshd tcp6 0 0 ::1:631 :::* LISTEN 7677/cupsd tcp6 0 0 ::1:25 :::* LISTEN 8037/master udp 0 0 192.168.122.1:53 0.0.0.0:* 8598/dnsmasq udp 0 0 0.0.0.0:67 0.0.0.0:* 8598/dnsmasq udp 0 0 0.0.0.0:111 0.0.0.0:* 1/systemd udp 0 0 0.0.0.0:5353 0.0.0.0:* 7062/avahi-daemon: udp 0 0 127.0.0.1:323 0.0.0.0:* 7114/chronyd udp 0 0 0.0.0.0:48534 0.0.0.0:* 7062/avahi-daemon: udp 0 0 0.0.0.0:783 0.0.0.0:* 6973/rpcbind udp6 0 0 :::111 :::* 1/systemd udp6 0 0 ::1:323 :::* 7114/chronyd udp6 0 0 :::783 :::* 6973/rpcbind
dmesg分析系统核心产生的信息
vmstat 侦测系统资源变化