Linux两个进程交换信息,Linux进程管理

sleep : 休眠指定的时间

ctrl + z :可以将一个正在前台执行的命令放到后台,并且暂停

fg :将后台中的命令调至前台继续运行,(Foreground)

bg :将进程搬到后台运行(Background)或将后台暂停的命令变成继续执行

jobs :查看当前有多少在后台运行的命令

& :这个用在一个命令的最后,可以把这个命令放到后台执行(通常配合nohup使用)

nohup :不挂断地运行命令

top :动态显示所有的进程

ps :列出当前所有正在运行的进程

kill :终止进程

ctrl + c :结束命令的执行

sleep : 暂停指定的时间

我现在是让休眠30秒,可以看到命令执行后并没有把客户端的shell提示符返还给我,说明正在休眠

d97bd35d077b

image.png

d97bd35d077b

image.png

ctrl + z :将一个正在前台执行的命令放到后台,并且暂停

通过bg %jobnumber 即可将暂停的job的状态由stopped改为running,仍在后台执行;当需要改为在前台执行时,执行命令fg %jobnumber 即可。

可以看到sleep 30这个命令暂停执行,并且返回一个后台的进程号

d97bd35d077b

image.png

fg :将后台中的命令调至前台继续运行,(Foreground)

如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid号)

bg :将作业放到后台运行,使前台可以执行其他任务,且可将后台暂停的命令变成继续执行 (注意:实际上,使用bg命令与在指令后面添加符号"&"的效果是一样的)

sleep 60

# 按ctrl z 键,暂停命令

sleep 60

# 按ctrl z 键,暂停命令

sleep 120

# 按ctrl z 键,暂停命令

jobs

# 查看后台进程,可以看到后台当前有三个命令暂停

fg %1

#把后台暂停的1号工作调到前台,但因为60秒时间已经到了,所以说这个把这个命令调到前台后直接就返回了shell 提示符

fg %2

#把后台暂停的2号工作调到前台,继续执行休眠命令,所以说不返回shell提示符,只能暂停或结束sleep命令才能返回shell提示符

fg %3

#同理

jobs

#查看当前后台进程,只剩两个,但是进程号不会改变(这个号码不是动态的,是唯一的对应于一个进程)

d97bd35d077b

image.png

提交后台进程

方法一(最常用)

nohup Command(要执行的命令) & :提交后台进程

& :这个用在一个命令的最后,可以把这个命令放到后台执行,但一般的普通程序即使使用 & 结尾,把任务放到了后台,shell提示符返还给你,你能继续输入命令来进行别的工作,但如果此时你有事需要离开,要关闭你的客户端,那么后台运行的任务也会被关闭。为了能够后台运行,我们需要使用nohup这个命令,在命令前加上nohup,即便客户端关闭,你提交的任务也可以继续在后台运行,所以一般这两个命令连用来提交后台任务。

如果使用nohup命令提交作业,那么命令的执行情况的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件,无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。

d97bd35d077b

image.png

提交后台成功,会返回一个PID号,ps可以查看进程。图中由于我的文件小,运行时间太短,查看进程时已经结束。(命令显示位“Done”)

换个大点的文件,运行时间长的,我们再来看下:

nohup fastq-dump --gzip --split-3 -O ~/text/tmp ~/text/SRR1039508.sra &

d97bd35d077b

image.png

提交成功会出现一个PID号,可以看到这个PID号跟top,ps查看进程时显示的一致,PID号和进程是一一对应的,kill+PID 号就能终止这个后台进程

d97bd35d077b

image.png

d97bd35d077b

image.png

方法二

如果一个要长时间运行的命令,我们忘记提交后台运行了,而此时又需要做其他的事(当然你可以再开一个窗,但这里讲的是你在同一个窗口下该怎么做)

此时你可以ctrl+z然后再执行bg命令,把任务搬到后台。(注意:因为没有nohup,此时不能关闭客户端)

bin=fastq-dump

dir=/home/yjzhang/scRNA-seq

ls /home/yjzhang/scRNA-seq/sra/SRR6791478 |while read id ;do $bin --gzip --split-3 -O $dir/raw $id ;done

ctrl +z

jobs

ps -ef |grep yjzhang

bg %1

jobs

ps -ef |grep yjzhang

exit

ps -ef |grep yjzhang

d97bd35d077b

image.png

d97bd35d077b

image.png

exit中断服务器连接与直接关闭客户端中断与服务器的连接不一样,第二种方法提交到后台的任务,exit退出与服务器连接的时候,提交的任务仍能在后台运行,而直接关闭客户端退出,这时候bg提交的任务很大可能会终止(应为这个bg就相等于在命令后面加了& ),但有时候也不终止(同样的命令用git登陆服务器执行时会终止,用xshell登陆时执行,退出后就不终止),为了保险起见,推荐使用第一种方法

d97bd35d077b

image.png

kill :发送信号给一个或多个进程(经常用来杀死一个进程)

kill +PID号 #杀死单个进程

ps -ef | grep yjzhang|awk '{print

math?formula=2%7D'%20%7Cwhile%20read%20id%3B%20do%20killid; done #批量杀死所有用户名为 yjzhang 提交的进程

d97bd35d077b

image.png

查看线程

top 统计信息前五行是系统整体的统计信息

top查看线程默认显示是Tasks(任务,进程),加-H参数才显示的是线程(Threads)

d97bd35d077b

image.png

top - 21:25:38 up 2 days, 2 user, load average: 0.08, 0.03, 0.00

1、第一行是任务队列信息 同uptime质性命令结果一样。

21:25:38

up 2 days

2 user

load average: 0.08, 0.03, 0.00

当前时间

up:系统运行时间

当前登陆的用户数

系统负载,即任务队列的平均长度,三个数值分别表示距离现在1分钟,5分钟,15分钟的负载情况

21时25分28秒

2天

当前2个用户登陆

1分钟前负载为0.08;5分钟前负载为0.03;15分钟前负载为0.00

注:load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

Tasks: 178 total, 1 running, 177 sleeping, 0 stopped, 0 zombie

%Cpu(s): 1.2 us, 0.1 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

2、第二行、三行为进程和 CPU 的信息。当有多个 CPU 时,内容可能超过两行。

Tasks

178 total

1 running

177 sleeping

0 stopped

0 zombie

进程(任务)

进程总数

正在运行的进程数

休眠(挂起)的进程数

停止的进程数

僵尸进程数

%Cpu(s)

1.2 us

0.1 sy

0.0 ni

99.7 id

0.0 wa

0.0 hi

0.0 si

0.0 st

CPU 占用率

(user) 用户空间占用cpu的百分比

内核空间占用cpu的百分比

niced 改变过优先级的进程占用cpu的百分比

空闲 CPU 百分比

IO wait IO等待占用cpu的百分比

Hardware IRQ 硬中断占用cpu的百分比

software 软中断占用cpu的百分比

Steal Time

注: CPU%是由每个核的 CPU 占用率之和算出来的。如果你是 4 核 CPU,核 1,CPU 使用率为100%,核 2,CPU 使用率为100%,则会CPU 高于100%的现象,最终为200%。

加- H参数后第二行显示为Threads

Threads 232 total :目前线程总数232

d97bd35d077b

image.png

KiB Mem : 16300688 total, 422428 free, 291988 used, 15586272 buff/cache

KiB Swap: 0 total, 0 free, 0 used. 15599052 avail Mem

3.第四、五行为内存使用信息

Mem

16300688 total

422428 free

291988 used

15586272 buff/cache

物理内存

物理内存总量

空闲物理内存

使用的物理内存总量

内核缓存内存量

物理总内存16300688k(约16G)

422428k(约0.4G)空闲

291988k(约0.27G)在使用

15586272k用于缓存

Swap

0 total

0 free

0 used

15599052 avail Mem

交换分区

交换分区总量

可用交换空间

使用中的交换空间总量

缓冲的交换区总量

注:交换分区(Swap)被频繁使用,可以看作物理内存不足而造成的

具体进程信息

第六行

PID

USER

PR

NI

VIRT

RES

进程id

进程所有者

进程优先级

nice值。负值表示高优先级,正值表示低优先级

进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

SHR

S

%CPU

%MEM

TIME+

COMMAND

共享内存大小,单位kb

进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程

上次更新到现在的CPU时间占用百分比

进程使用的物理内存百分比

进程使用的CPU时间总计,单位1/100秒

进程名称(命令名/命令行)

查看一个进程所调用的线程

进程概念:

进程是表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。所以,进程是系统中的并发执行的单位。

线程概念:

线程是进程中执行运算的最小单位,亦即执行处理机调度的基本单位。如果把进程理解为在逻辑上操作系统所完成的任务,那么线程表示完成该任务的许多可能的子任务之一。

d97bd35d077b

image.png

可以看到我的一个任务调用了8个线程

d97bd35d077b

image.png

这个调用了6个线程

服务器配置的查询

lscpu #查询CPU详细信息

cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l #查讯物理CPU个数

cat /proc/cpuinfo| grep "cpu cores"| uniq #查讯每个物理CPU中core的个数(即核数)

cat /proc/cpuinfo| grep "processor"| wc -l #查讯逻辑CPU的个数(线程)

d97bd35d077b

image.png

CPU(s):逻辑上(模拟出的)CPU个数

Thread(s) per core :每个核心的线程数 (查询结果显示我的是每个核心一个线程)

Core(s) per socket :每个物理CPU上的核心数

Model name :CPU型号

说明我用这个服务器是1个CPU,8个物理核心8个线程(即8核单线程)

补充:

CPU个数即CPU芯片个数。

CPU的核心数是指物理上,也就是硬件上存在着几个核心。比如,双核就是包括2个相对独立的CPU核心单元组,四核就包含4个相对独立的CPU核心单元组。

线程数是一种逻辑的概念,简单地说,就是模拟出的CPU核心数。比如,可以通过一个CPU核心数模拟出2线程的CPU,也就是说,这个单核心的CPU被模拟成了一个类似双核心CPU的功能。(注:CPU的线程和进程中的线程概念不一样,CPU线程是模拟出来的核心数,进程中的线程是要完成一个任务所调用的子任务数)

综上来说,在提交一个任务的时候我们要查看一下CPU的使用情况和设置适当的线程数,不要超过限度

学生信,友情推荐:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值