[それを言うために、それを明確に!プロセス管理]

内容:
()プロセスの概念を理解して
どのようにプロセスを表示&&プロセスを殺すために(B)を
(C)バックグラウンドで実行中のプログラムを置く
(4)は、プロセスの優先順位を理解する
(e)は、調整プロセスの優先度を


(A)の概念のプロセスを理解する
(1.1)は、当社のシステムでより多くの背景概念を持って、最初の「プログラム」は、コードの一部のうちに開発言語の使用を意味し、それはまだ私たちのコンピュータのハードドライブに保存されていますプログラムは、それはメモリリソースを消費しない、CPUリソースをどちらも消費しません。第二は、プロセスと呼ばれるメモリとCPUで実行中のプログラムは、例えば、QQ、サンダーと私たちのコンピュータ上で実行されている他のアプリケーションに反映される「プロセス」、です。第三は、「スレッド」、プロセスにおいて、処理単位に属するスレッドは、プロセスの共有メモリ空間、複数のスレッドを含むことができるです。
我々は、システムは、各ユーザが自身のID番号を持っていることを知っている(1.2)は、各ページが独自のID番号を持つUID、同じプロセスと呼ばれる、プロセスIDがPIDと呼ばれます。プロセスを実行するプロセスでも、我々は親プロセス、子のプロセスBと呼ばれる、プロセスAの親プロセスを呼び出して、一定期間後にオーバーランに実行しているプロセスは、Bプロセスが生成されますよう、子プロセスを生成することが子プロセスを生成することがあり、それは子プロセスを殺すことがあり、その親と子プロセス間の通信は、私たちは「信号」と呼ばれるこの通信を呼び出します。
[それを言うために、それを明確に! プロセス管理]


(B)どのようにプロセスを表示&&プロセスを殺すために
(2.1)pstreeコマンドコマンド
(2.1.1)我々は、我々はすべてのプロセスでシステムをチェックアウトすることができvms002上のホストにそれを、pstreeはコマンドを使用することができ、プロセス間の親子関係を見始めますシステムは、すべてのプロセスの親を開始し、親と子の関係が、systemdにされ、そのPIDは1で、親が以前のバージョンをRHEL6と、すべてのシステムがinitにされています。
[それを言うために、それを明確に! プロセス管理]
(2.1.2)pstreeはプロセスツリー図を表示するためにのみ、プロセスの名前、そして私たちは、ツリービューを表示するように進めることができるという統合ショーの同じプロセス、およびディスプレイを表示するために、プロセスPID
#pstreeは-p ---ツリー図表示処理と表示処理PID
#pstreeは-p |ほかの
[それを言うために、それを明確に! プロセス管理]
親プロセスの(2.2)は、定期的に何をするか、そして、信号システム、子プロセスにシグナルを送るのだろうか?私たちは、サービスを再起動したい場合はここで1)SIGHUPは、再起動することである、保留表す信号リストシステムのすべてを一覧表示するには、「#のkill -l」コマンドを使用することができますが、ID番号を変更したくない、あなたは1を使用することができます無信号、例えば、我々はプロセスを終了するために、任意のパラメータを指定せずにkillコマンドを使用して、15)SIGTERM表示従来の方法は、プロセスを終了する; 2)SIGINT表現一般に、我々は、プロセスを終了する「はCtrl + C」を使用しませんデフォルトは第15号、信号操作を使用することであるが、パワーが強く十分でない場合に、異常状態のための処理は終了されていない。今回、我々は、プロセスの強制終了は、パワーが比較的強いこと9)SIGKILL信号を使用します。
#キル-l ---リスト全ての信号リスト
29626プロセス終了する#死滅-2 29626 ---使用「のCtrl + C」方法
[それを言うために、それを明確に! プロセス管理]
プロセスを終了するモード(2.3)
私たちは、このようなFirefoxのを実行しているとして、プロセスを開始する場合(2.3.1)は、どのように我々はそれのPIDを表示する必要がありますか?まず、我々はその後、異常なプロセス、それにクエリを殺すためにkillコマンドを使用し、pgrepコマンドを使用して、直接あなたが(図2-3)のPIDをチェックアウトすることができ、プログラムの名前を追加することができます。もちろん、我々は、2つのステップ(図2-4)の1つのステップに組み合わせることができます。
#pgrepコマンドのfirefox ---クエリFirefoxのプロセスPID番号
#のkill -9 $(のpgrep Firefoxが) --- Firefoxのプロセスを殺すために強制的に
#キルを-9 pgrep firefox--- Firefoxのプロセスを強制終了することを強制
[それを言うために、それを明確に! プロセス管理]
[それを言うために、それを明確に! プロセス管理]
(2.3.2)、コースkillコマンドのを除き、我々はまた、プログラム名に追いつくために、直接、killallをコマンドを使用することができます。
#killallをFirefoxの--- Firefoxのプロセスを殺す
[それを言うために、それを明確に! プロセス管理]
システムの機能を追い出さユーザーで実現することができるpkillは(2.3.3)我々はまた、pkillは使用することができますが、。まず、我々は、我々はシステムがジェリーのユーザーの存在は、私たちは、このジェリー(図2-5-2)から追い出さユーザーにpkillはコマンドを使用してログインであることがわかりvms002ユーザーはホスト(図2-5-1)へのログオンジェリーを使用します彼らは(図2-5-3)の動作をスムーズにすることができたときに我々はジェリーの管理者削除ユーザとそのホームディレクトリを使用する場合。
pkillは-kill -t PTS#/ 1
#userdelの-rジェリー
[それを言うために、それを明確に! プロセス管理]
[それを言うために、それを明確に! プロセス管理]
[それを言うために、それを明確に! プロセス管理]
(2.4)我々はまた、コマンドpidofを使用することができますが、我々は、プロセスの特定の名前でpidofコマンドを見つける必要があるプロセスを表示するには、プロセス名のクエリがある場合は、矛盾がありますあなたは、クエリのpgrepコマンドファジークエリを使用することができ、pgrepコマンドに比べて、チェックアウトし、したがって、より効率的にすることはできません。
#Pidofのfirefox ---クエリFirefoxのプロセスID
[それを言うために、それを明確に! プロセス管理]
(2.5)PSオプションおよび列の意義
(2.5.1)私たちは、すべてのプロセスのシステムを照会したい場合は我々だけでpsコマンドを使用している場合、あなたは、psコマンドを使用することができたときに、現在のシェルプロセスにおける自身の配下の端末のみクエリですいくつかのプロセスのみ、あなたは、バックグラウンド・プロセスシステムを見ることができない、プロセスにもう一方の端を見ることができません。我々はすべてのプロセスにシステムを照会する場合は、この時間は、次の2つの方法で次のクエリを使用できるように:
#PS -ef ---使用Linuxスタイルのファッションショーのシステムデーモン
#psの補助--- Unixスタイル表示システムを使用する方法バックグラウンド・プロセス
[それを言うために、それを明確に! プロセス管理]
[それを言うために、それを明確に! プロセス管理]
(2.5.2)は、その後、私たちは、各列の意味を代表して「#PA AUX」コマンドを見ています。
#PsのAUX |情報問い合わせヘッドヘッドの10行を---
USER:プロセス所有者
PID:IDプロセス
PPID:親
%のCPU:プロセスがCPUの割合かかる
メモリ集約率:%のMEM
NI:NICEプロセス値を、大きな値は、より少ないCPU時間を表し
、プロセスが使用する仮想メモリのセット(KB):VSZ
RSS(常駐ページの数)は、このプロセスによって消費されるメモリの一定量(KB)
TTY:その端末上でプロセスを端末の独立した場合、それは等、PTS / 0である場合、疑問符は、ネットワーク接続されたホストプロセスで表され、ある、(ランダー終了位置)を実行する(?)
WCHAN:現在のプロセスは、それがある場合に進行中であるかどうかを「 - 」とは、ありますた
スタートは:プロセスの開始時間がトリガされた
時間:実際に実行するためにCPU時間を使用してプロセス
のコマンドを:コマンド名とのパラメータ
(2.5.3)私たちは、関連する状態STAT列の意味を見てみましょう。
D:無停電スリープ状態(通常IOプロセス)
R:キュー実行可能な状態で実行している
S:嘘が休止
停止またはトラッキング:T
Wを:(カーネル2.6の最初から無効な)メモリ交換入力
X-ました:死んだプロセス(基本まれ)
Z-:ゾンビ
<:優先度の高いプロセス
N:優先順位の低いプロセスの
L:一部のページがメモリにロックされている
S:プロセス・リーダー(その下子プロセス)
L:(使用CLONE_THREAD、同様のNPTLのpthreadの)マルチプロセス
+:プロセスグループの背景に
[それを言うために、それを明確に! プロセス管理]
(2.6)psコマンド他の用途
(2.6.1)我々は、現在のシステムlscpuのCPU使用率を照会するために使用することができる(図3 -6)、私たちのシステムは現在、Firefoxは、我々は、この特定のプログラムを照会するアプリケーションがどのCPU現在のシステム上で実行され、我々は次のクエリ(図3-7)を行うためにpsコマンドを使用することができます実行します。
Lscpu#
#psのは、MOは、PID、COMMは、PSR $(のpgrep Firefoxが)--- Firefoxは、クエリを処理し、そのスレッドがどのCPU上で実行する、PSR CPUで実行するためにどの部分を示している
[それを言うために、それを明確に! プロセス管理]
[それを言うために、それを明確に! プロセス管理]
我々は、特定のクエリpsコマンドを指定したい場合は(2.6.2)をこれは情報の列は、次のクエリモードを使用することができます
。#psの-o pidの-ex、CPUの%、%MEMを|ヘッド---特定の列のクエリ情報にpsコマンド
[それを言うために、それを明確に! プロセス管理]


(三)把程序放置后台运行
(3.1)使用nohup
(3.1.1)当父进程关闭的时候,它所对应的子进程全部跟着关闭。我们在vms002主机上首先打开一个firefox进程,使用pstree命令发现,firefox是运行在第三个终端bash之上的。
# pstree | grep -C2 firefox
# ps aux | grep -v grep | grep firefox
[それを言うために、それを明確に! プロセス管理]
[それを言うために、それを明確に! プロセス管理]
(3.1.2)当我们将第三个终端关闭之后,会发现在终端中创建的firefox应用程序也自动关闭了。
# ps aux | grep -v grep | grep firefox
[それを言うために、それを明確に! プロセス管理]
(3.1.3)但是很多时候我们会通过远程连接的方式执行脚本,如果执行一个脚本需要10个小时,是否是说我们需要将终端保持连接10个小时不关闭?因此为了解决这个问题,我们需要将运行的进程放置到后台运行(图3-4),此时我们发现关闭了所有的终端后firefox仍然能够正常的运行。
# nohup firefox &> /dev/null &---我们创建一个firefox并放置到后台运行
# ps aux | grep -v grep | grep firefox---查询当前firefox的运行状态
# pstree | grep -C2 firefox---使用pstree查询firefox的运行状态
注意:grep -v grep表示的是反向过滤,不去搜索grep命令后包含的字段
[それを言うために、それを明確に! プロセス管理]
[それを言うために、それを明確に! プロセス管理]
(3.2)使用jobs
(3.2.1)当我们在vms002的终端直接运行一个firefox进程后,发现此时终端就无法再运行其他的命令了,此时我们可以使用键盘“Ctrl+Z”将firefox程序停止并放到后台。
[それを言うために、それを明確に! プロセス管理]
(3.2.2)如果我们希望查询在后台的程序状态信息,可以使用jobs命令查看。如果我们想将停止的firefox程序放在后台激活运行,可以使用“# bg 1”命令。
# jobs---查询进程的状态
# bg 1---将1号jobs激活并放在后台运行
[それを言うために、それを明確に! プロセス管理]
(3.2.3)如果我们希望将后台运行程序调到前台来,则可以使用“# fg 1”命令,如果我们想终止运行的程序,则可以使用“Ctrl+C”命令。如果我们在运行程序的时候想直接运行在后台,则应该使用“# firefox &”这种方式即可,如果我们想结束进程则可以使用kill命令,其中1号jobs使用“%1”表示。
注意:虽然我们将firefox放置到后台运行了,但是此时firefox仍然是在当前的终端上运行的,即如果当前终端关闭了那么此进程也会被关闭,这个要和nohup区分(图3-12)。
# fg 1---希望将后台运行程序调到前台来运行
# firefox &---运行程序的时候想直接运行在后台
# kill -9 %1---结束进程
# ps aux | grep -v grep | grep firefox
[それを言うために、それを明確に! プロセス管理]
[それを言うために、それを明確に! プロセス管理]


(四)了解进程优先级
(4.1)在我们系统中所有的任务都是由CPU来完成的,在系统中如果一颗CPU有多颗核,那么我们认为就是有多颗CPU。在计算机中我们是可以一次性执行多个任务的,同时一颗CPU也是可以同时执行多个任务的。对于CPU来说,是分为时间片执行的,例如现在系统中有多个任务,那么CPU会对每个任务分片执行,假设每个时间片的时长是1ms,由CPU轮询的在每个任务之间循环执行,由于时间片循环的速度非常快,因此一般我们在系统中操作的时候是感觉不到有时间片在轮询的。有时候我们会感觉系统中某些任务是非常重要的,需要CPU优先执行,此时我们是可以在系统中调整进程的优先级的。优先级的组成如下(图4-1),一般来说,使用chrt命令可以修改优先系数,不过一般不建议修改(图4-2),而nice值的范围是“-20~19”之间,nice值越小优先级越高,nice值越大优先级越低。我们在图形化界面中可以调整进程的优先级的,我们选择“应用程序”--“系统工具”--“系统监视器”,然后便可以在图形化界面中修改进程的优先级了。
[それを言うために、それを明確に! プロセス管理]
[それを言うために、それを明確に! プロセス管理]
[それを言うために、それを明確に! プロセス管理]
(4.2)如果我们的系统现在有两个进程,同时有两颗CPU,如果一个CPU上单独运行一个进程,那么对这两个进程设置进程优先级是没有意义的,但是我们希望能出现抢占资源这种情况,因此我们需要把两个进程放到一颗CPU上去运行。我们想要实现这样的效果,一般可以采用两种方式,第一种是关闭掉其中的一颗CPU,第二种方式是配置CPU的亲和性。


(五)调整进程优先级
(5.1)当前系统我们有两颗CPU,首先我们通过关闭其中的一颗CPU的方式来实现进程对资源抢占的效果,我们在vms002主机上进入到/sys/devices/system/cpu/cpu1目录下,发现online的值为1,表示正在启用的状态,我们可以将online的值设置为0,此时表示1号CPU处于关闭的状态(图5-2),我们发现系统中确实此时只有0号CPU在运行(图5-3)。
[それを言うために、それを明確に! プロセス管理]
[それを言うために、それを明確に! プロセス管理]
[それを言うために、それを明確に! プロセス管理]
(5.2)top命令每一行的含义
(5.2.1)接着我们在vms002主机上执行两个cat命令,实现不断消耗内存的效果(图5-4)。然后我们使用top命令查询当前系统所有进程的情况,再按键盘1可以显示所有CPU运行的信息,其中第一行“top - 18:01:29 up 11:52, 6 users, load average: 2.72, 2.11, 1.11”分别代表的是当前的时间是18:01:29,机器一共运行了11:52的时长,当前系统有6 users个用户登录,机器在一分钟、五分钟、十五分钟的负载分别是“2.72, 2.11, 1.11”。第二行“Tasks: 475 total, 7 running, 468 sleeping, 0 stopped, 0 zombie”表示的是系统总共有进程475 total,其中7 running在运行,有468 sleeping在睡眠状态,有0 stopped个是停止的,有0 zombie时僵尸的状态。由于我们将1号CPU关闭了,所以此时2个进程都是在0号CPU上抢占式运行(图5-5)。第三行“%Cpu(s): 20.4 us, 79.6 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st”表示的是系统用户进程使用CPU百分比为20.4 us,内核中的进程占用CPU百分比为79.6 sy,用户进程空间内改变过优先级的进程占用CPU百分比为0.0 ni,空闲CPU百分比为0.0 id,CPU等待I/O完成的时间总量为0.0 wa(如果wa占用较多CPU,原因是磁盘性能有问题,建议更换磁盘),硬件中断占用CPU百分比为0.0 hi,软件中断占用CPU百分比为0.0 si,被虚拟内存偷走占用CPU百分比为0.0 st。
注意:htop命令也可以实现top命令的相关显示,不过需要我们额外的安装相关的软件包
# cat /dev/zero > /dev/null &
# top -d 1---每1秒中更新一次所有进程的显示
[それを言うために、それを明確に! プロセス管理]
[それを言うために、それを明確に! プロセス管理]
(5.2.2)经验:
0.0 hi:硬中断,占的CPU百分比。硬中断是由硬件产生的,比如,像磁盘、网卡、键盘、时钟等。每个设备或设备集都有它自己的IRQ(中断请求)。基于IRQ,CPU可以将相应的请求分发到对应的硬件驱动上(注:硬件驱动通常是内核中的一个子程序,而不是一个独立的进程)hi->Hardware IRQ:The amount of time the CPU has been servicing hardware interrupts
0.0 si:软中断,占的CPU百分比。通常软中断是一些对I/O的请求。这些请求会调用内核中可以调度I/O发生的程序。对于某些设备,I/O请求需要被立即处理,而磁盘I/O请求通常可以排队并且可以稍后处理。根据I/O模型的不同,进程或许会被挂起直到I/O完成,此时内核调度器就会选择另一个进程去运行。I/O可以在进程之间产生并且调度过程通常和磁盘I/O的方式是相同的。Si->Software Interrupts:The amount of time the CPUhas been servicing software interrupts。
0.0 st:虚拟机偷取物理CPU的时间。比如:物理机已经运行了KVM,KVM虚拟机占用物理机的CPU时间。
(5.2.3)第四行中“Mem : 4033636 total”表示物理内存总量,“3265760 free”表示空闲内存总量,“380604 used”表示使用的物理内存总量,“387272 buff/cache”表示用作内核缓存的内存量和free -k是一个意思。第五行中“Swap: 6291448 total”表示交换区总量,“6291448 free”表示空闲交换分区总量,“0 used”表示使用的交换区总量,“3394360 avail Mem”表示总的可利用内存是多少。
[それを言うために、それを明確に! プロセス管理]
(5.2.4)第六行中PID表示进程id,USER表示进程所有者的用户名,PR表示由内核动态调整的优先级、用户不能修改,NI表示进程优先级即nice值、负值表示高优先级、正值表示低优先级、用户可以自己调整,VIRT表示虚拟内存、是进程正在使用的所有内存,RES表示的是常驻内存集(resident memory usage),SHR表示的是共享内存大小(shared memory)单位kb,S表示进程状态、其中D(不可中断的睡眠状态)、R(运行中或可运行)、S(睡眠中)、T(已跟踪/已停止)、Z(僵死),%CPU表示上次更新到现在的CPU时间占用百分比,%MEM表示进程使用的物理内存百分比,TIME+表示使用的CPU时间总计、单位1/100秒,COMMAND表示命令行。
注意:对于SHR:1、除了M自身进程的共享内存,也包括其他进程的共享内存;2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小;3、计算某个进程所占的物理内存大小公式为RES-SHR;4、swap out后,它将会降下来
[それを言うために、それを明確に! プロセス管理]
(5.2.5)对于top快捷键:
默认3s刷新一次,按s键刷新时间
按空格:立即刷新
q:退出
P:按CPU排序(CPU进行排序)
M:按内存排序
T:按时间排序
数字键1:显示每个内核的CPU使用率
u/U:指定显示的用户
h:帮助
# top -p 9465---使用top命令动态只查看某个或某些进程的信息
[それを言うために、それを明確に! プロセス管理]
(5.3)此时我们在图5-5中发现两个cat进程的NICE值都是0是一致的,而我们希望将进程11239的进程优先级提高,我们可以使用renice命令。我们发现11239进程的nice值为-19,CPU的占用率为96.1%,而11232的nice值为0,CPU的占用率只有1.9%,因此我们通过设置nice值而实现了进程抢占资源的效果,最后我们使用killall命令终止cat命令的总线。
# renice -n -19 11239---将11239进程的nice值设置为-19
# killall -7 cat---终止cat命令的总线
[それを言うために、それを明確に! プロセス管理]
[それを言うために、それを明確に! プロセス管理]
(5.4)调整进程优先级
(5.4.1)接着我们将1号CPU开启,实现1号CPU和0号CPU都是启用的状态(图5-8),并重新运行两个cat命令,实现不断消耗内存的效果(图5-9),此时我们发现两个进程是分别在两个CPU上运行的(图5-10)。
# echo 1 > cpu1/online
# cat /dev/zero > /dev/null &
[それを言うために、それを明確に! プロセス管理]
[それを言うために、それを明確に! プロセス管理]
[それを言うために、それを明確に! プロセス管理]
[それを言うために、それを明確に! プロセス管理]
(5.4.2)当然现在我们想具体的知道每个进程究竟是在哪个CPU上运行的,我们可以使用ps命令,此时我们发现13884进程是在0号CPU上运行,13899是在1号CPU上运行的。
PS Moは#、COMM、PSR `のpgrep cat`のpid
[それを言うために、それを明確に! プロセス管理]
(5.4.3)と今は状態2 CPUにしたい、まだ同じプロセスで実行されているすべてのプロセスがCPUです指定することができ、有効になっている、我々はタスクセットを使用することができますコマンドは(図5-12)指定された、我々は両方のプロセスがすでに同じCPU上で実行されている、と0(図5-13)を実行しているCPUの容量の50%を占めていることがわかります。
#タスクセット-c 0猫の/ dev /ゼロ>を/ dev / null&--- 0 CPU実行中のプロセスの数に猫を指定
#PS MoはPIDが、COMMは、PSRはpgrep cat---クエリプロセスは、どのようなCPUのの部分で実行され
#トップは1つの---トップ-dコマンドと1秒ごとに更新し
[それを言うために、それを明確に! プロセス管理]
[それを言うために、それを明確に! プロセス管理]
、我々は特定の優先順位で実行することができた場合、その後、すでに実行中のプロセスの優先度を変更され、時間の優先順位を調整(5.5)それをプログラム?実際には、これが可能である、我々はその後、素敵な指定されたプロセスの優先度が-10で使用します(図5-14)catコマンドサイクルを実行し始めました。私たちは、作成した-10のトップコマンド検出プロセスのナイス値で実行されています(図5-15)を使用します。
#ニース-n -10タスクセット-c 1匹の猫の/ dev /ゼロ>を/ dev / null&--- 私たちはその後、catコマンドサイクルを実行するために始めた、素敵な指定されたプロセスの優先度が-10で使用
#トップは1 -d
[それを言うために、それを明確に! プロセス管理]
[それを言うために、それを明確に! プロセス管理]

------この記事を締結、読んでくれてありがとう------

おすすめ

転載: blog.51cto.com/13613726/2461226