前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux进程管理详细解读

Linux进程管理详细解读

作者头像
生信喵实验柴
发布2021-12-15 11:31:02
9230
发布2021-12-15 11:31:02
举报
文章被收录于专栏:生信喵实验柴
背景

Linux系统为多用户多任务系统 生物软件运行时要能够查看运行状态 实时监控软件运行状态 例如 CPU 内存使用情况等 当运行出现错误时 要能够及时杀死任务 以及任务前后台切换 是否挂起等操作 。

本期命令提前预览:

代码语言:javascript
复制
top             press "q" to exit 查看系统运行状态 
top -b             press "Ctrl +C" to exit top -c 
top -u "yourname" 
htop htop查看系统运行状态 
kill -9 "process number" 杀死进程 
passwd       change your password 修改密码 
sleep 休眠 
fg        forehead 后台程序 
bg        background 前台程序 
jobs      查看后台进程 
nohup 不挂起运行程序,关闭登录窗口后程序继续运行 
disown 忘记使用nohup之后,将后台任务转换为nohup

1 查看进程

进程查看可以使用

top 和 ps 命令,其中 top 可以动态查看, ps 查看静态结果。

Linux系统中时刻运行着许多进程,如果能够合理地管理它们,则可以优化系统的性能。在Linux 系统中有 5 种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,其各自含义如下所示。

代码语言:javascript
复制
R(运行):进程正在运行或在运行队列中等待。
S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
D(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断。
Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放。
T(停止):进程收到停止信号后停止运行。

命令:top

top可以动态显示系统进程使用情况,类似于 windows 系统的任务管理器。可以显示当前系统正在执行的进程的相关信息,包括进程 ID 、内存占用率、 CPU 占用率等。

代码语言:javascript
复制
top #press "q" to exit 查看系统运行状态 
top -b # press "Ctrl +C" to exit 
top -c 
top -u "yourname"

第1 行:系统时间、运行时间、登录终端数、系统负载( 3 个数值分别为 1 分钟、 5 分钟、15 分钟内的平均值,数值越小意味着负载越低)。

第2 行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。

第3 行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。其中数据均为 CPU 数据并以百分比格式显示,例如 “99.9 意味着有99.9% 的 CPU 处理器资源处于空闲。

第4 行:物理内存总量、内存空闲量、内存使用量、作为内核缓存的内存量。

第5 行:虚拟内存总量、虚拟内存空闲量、虚拟内存使用量、已被提前加载的内存量。

top 命令结果详解

内容

释义

USER

进程的所有者

PID

进程ID号

%CPU

运算器占用率

%MEM

内存占用率

VSZ

虚拟内存使用量(单位是KB)

RSS

占用的固定内存量(单位是KB)

TTY

所在终端

STAT

进程状态

START

被启动的时间

TIME

实际使用CPU的时间

COMMAND

命令名称与参数

命令:ps: process status

ps 也是系统进程管理工具,与 top 不同的 是 top 可以动态显示,而 ps 则是静态显示,是某一时刻的快照,静态显示的好处是便于其他程序捕获结果,进行处理。

代码语言:javascript
复制
ps -aux - 显示进程信息,包括无终端的(x) 
ps -ef 显示所有进程信息,连同命令行 
ps -aux --sort -pcpu | less 根据 CPU 使用来升序排序 
ps -aux --sort -pmem | less 根据 内存使用 来升序排序 
ps -aux --sort -pcpu,+pmem | head -n 10 消耗CPU和内存前十名用户

a 显示所有的进程 
-a 显示同一终端下的所有程序 
e 显示环境变量 
f 显示进程间的关系 
-H 显示树状结构 
r 显示当前终端的程序 
T 显示当前终端的所有程序 
-au 显示更详细的信息 
-aux 显示所有包含其他使用者的行程 
-u 指定用户的所有进程

2 前后台切换

代码语言:javascript
复制
& #命令行任务放到后台 
sleep #休眠一定时间 
jobs # 查看后台进程 

fg #forehead 切换为后台程序 
bg #background 切换为前台程序 
ctrl+z #暂停任务 
ctrl+c #终止任务

案例:

代码语言:javascript
复制
#1 后台运行200秒
sleep 200 & 
sleep 300 & 

#2 jobs查看任务 
jobs 

#3 任务1切换到前台 
fg 1 

#4 切换到后台 
ctrl+z暂停;
bg 1;切换到后台运行;

#5任务2切换到前台杀掉 
bg 2 
ctrl+c

3 任务管理

3.1nohup 非 挂起

nohup命令的全称为 “no hang up”,该命令可以将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。

无论是否将nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

代码语言:javascript
复制
nohup sh scripts.sh &

3.2切换为非关起 disown

disown命令可以从当前 shell 的作业列表中移除全部作业,也可移除指定的一到多个作业;正在运行的作业也可以移除;也可以标记作业,使得它们在当前 shell 退出后也不会结束。

该命令需要set 选项 monitor 处于开启状态时才能执行;查看作业控制状态:输入 set o 查看 monitor 行;执行 set o monitor 或 set m 开启该选项。disown 命令该命令是 bash 内建命令,相关的帮助信息请查看 help 命令。

常用参数:

代码语言:javascript
复制
-h 标记每个作业标识符,这些作业将不会在shell接收到sighup信号时接收到sighup信号
-a 移除所有的作业 
-r 移除运行的作业

3.3杀死任务 kill

kill的作用是杀死进程, kill 命令可将指定的信号发送给相应的进程或工作。kill 命令默认使用信号为 15 ,用于结束进程或工作。如果进程或工作忽略此信号,则可以使用信号 9 ,强制杀死进程或作业。使用 kill l 可以查看全部信号值。

想要使用kill 杀死一个任务,首先获取 任务的 ID 号,可以通过 top 或者 ps 命令获得,例如当前有一个 sleep 进程, pid 号为 12000 ;通过 kill 9 可以强制杀死。

代码语言:javascript
复制
kill -9 12000

4 screen

Screen是一个可以在多个进程之间多路复用一个物理终端的全屏窗口管理器。Screen 中有会话的概念,用户可以在一个会话中创建多个 screen 窗口,在每一个 screen 窗口中就像操作一个真实的 t elnet/SSH 连接窗口那样。也就是我们登录 Linux shell 之后,运行 screen 命令,打开一个新窗口,接下来的任务在 screen 中运行,这样即使掉线了,任务也还在。与screen 类似的还有 tmux 命令。

4.1选项参数

代码语言:javascript
复制
$ screen --help 
Use: screen [-opts] [cmd [args]]
or: screen -r [host.tty] 

Options:-A :将所有的视窗都调整为目前终端机的大小。
-d :将指定的screen作业离线。
-h :指定视窗的缓冲区行数。
-m :即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r:恢复离线的screen作业。
-R :先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s:指定建立新视窗时,所要执行的shell。
-S:指定screen作业的名称。
-v :显示版本信息。
-x:恢复之前离线的screen作业。
-ls:显示目前所有的screen作业。
-wipe :检查目前所有的screen作业,并删除已经无法使用的screen作业。

4.2快捷键

使用screen需要经常使用快捷键,其中最常用的就是ctrl+a,下面列出一些最常用的快捷操作:

代码语言:javascript
复制
ctrl + a,d #暂离当前会话 
ctrl + a,c #在当前screen会话中创建一个子会话 
ctrl + a,w #子会话列表 
ctrl + a,p #上一个子会话 
ctrl + a,n #下一个子会话 
ctrl + a,0-9 #在第0窗口至第9子会话间切换

4.3使用案例

利用screen不间断下载生物数据的案例

代码语言:javascript
复制
#1 新建会话,命名为wget 
screen -S wget 

# 2 运行命令 
wget -c ftp://ftp.ncbi.nlm.nih.gov/blast/db/FASTA/swissprot.gz 

# 3 按ctrl+a,然后字母d,退出会话,任务仍在运行 
$ screen -S wget 
[detached from 283349.wget]

# 4 screen -ls查看任务 
$ screen -ls 
There is a screen on: 
            283349.wget (Detached) 
1 Socket in /var/run/screen/S-wangtong. 

#5 重新进入wget终端,任务正在运行 
$ screen -r wget 

# 6 关闭会话任务,如果在会话中使用exit,就会在退出会话,也关闭了该会话,或者按ctrl+a,k 
# screen ls查看会话 
$ screen -r wget 
[screen is terminating]
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信喵实验柴 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档