天天看點

linux 程序的fg,Linux常用指令之--系統程序(PS,kill)及前背景操作(jobs,fg,bg,nohup)...

程序概述

具有某種標明任務的程式在一個資料集合上的一次具體執行過程

每一個程序都有一個獨立的程序号(Process ID,PID),系統通過調用程序号來排程操控程序

系統的原始程序是systemd 。PID總是1,是系統中第一個啟動的程序

一個程序可以産生另一個程序。除了systemd 以外,所有的程序都有父程序

檢視程序PS

ps [option] 前面不加-的就是不加

• a 顯示所有包括所有終端的程序

• x 顯示所有包括不連接配接終端的程序(如守護程序)

• u 顯示程序所有者的資訊

• p 顯示指定程序ID的資訊 後面跟PID

• -e 顯示所有程序

• -f 顯示程序的父程序

因為-e包含-f,是以-e和-f連用分不清哪個是父程序,是以如果想看父程序,就單獨用-f

• -l 以長清單的方式顯示資訊

• -o 屬性,… 顯示定制的資訊(ps -o tty,pid或者是ps -o tty -o pid)這就是顯示順序

• pid、comm、%cpu、%mem、state、tty…

• pstree可以用來以樹狀的方式表現程序的父子關系

ps的一般用法是ps aux | grep

搜尋程序ps aux | grep XXX

按預定的模式:pgrep

• pgrep –U root 檢視使用者root運作的程序的程序号

• pgrep –G redhat 檢視組redhat運作的程序的程序号

按确切的程式名稱:pidof

• pidof bash

通過管道來搜尋(上面的按預定和按确切程式的不常用)

• ps aux | grep XXX 最重要的

ps aux | grep root

控制程序

kill

用于向指定程序号發送特定信号

文法:kill [-signal]

• kill -l:列出所有可以由kill傳遞的訊号

• man 7 signal:顯示信号的詳細清單

• -15,TERM(預設)-整潔終止

預設為15(終結),把這個程序要做的事兒做完再死

• -9,KILL-立即終止

killall

根據程序名來發送標明信号

文法:killall [-signal]

比如我yum安裝一個軟體包的時候給它通過ctrl+z打斷了,如果我再敲同樣的指令的時候會有如下的提示,告訴我有安裝還沒退出,目前安裝無法開始。需要等它退出才能繼續

Another app is currently holding the yum lock; waiting for it to exit...

The other application is: yum

Memory : 97 M RSS (457 MB VSZ)

Started: Sat Jul 6 13:55:48 2019 - 01:44 ago

State : Traced/Stopped, **pid: 13041**

這時可以通過kill掉這個程序來解決這個問題

ps aux | grep yum 可以看到關于yum的程序,我記住一個程序号,比如為15177,

我通過kill -15 15177 殺不死。但是通過kill -9 15177可以殺死。像yum中斷這種,它已經中斷了,無法再繼續完成它的任務後再被殺死,是以-15是殺不死它的,必須要通過-9

❉killall後面還是加-9或-15。但是killall後面加的不是pid,而是程序名

如果有一個程序A,它依賴于B,那麼即使殺死B,A還會重新生成B。但一般都不會平白無故殺死一個程序,都是在一個程序嚴重占用系統資源的時候殺死它

★killall -9 systemd 執行不了,因為執行這個權限是systemd給的,是以不能殺掉這個程序

前台程序與背景程序

程序描述:

預設情況下,一個指令執行後,此指令将獨占shell,并拒絕其他輸入。我們稱之為前台程序。反之,則稱為背景程序。比如qq,最小化以後就是背景狀态。前台的不一定是運作的,也可能是僵屍。背景的不代表不是運作的

對每一個終端,都允許多個背景程序

對前台/背景程序的控制與排程,被稱為任務控制

将一個前台程序放入背景

• & 将一個程序直接丢入背景,在背景還是在運作的

killall -15能殺死

想讓控制台能正常寫别的指令行就ctrl+d

• ctrl + z:将一個正在運作的前台程序暫時停止,并丢入背景

killall -15殺不死它,隻能用killall -9

前台運作的時候可以通過ctrl+z打斷,但背景運作的通過ctrl+z打斷不了,隻能通過kill給它發送結束信号才能結束

背景程序的控制

• jobs 列出系統作業号和名稱

• fg [%作業号] 将背景中的指令調至前台繼續運作

• bg [%作業号] 将在背景暫停的指令恢複在背景運作

• kill [%作業号] 給對應的作業發送終止信号

如果讓程式始終在背景執行,即使關閉目前的終端也執行(之前的&做不到),這時候需要nohup。該指令可以在你退出帳戶/關閉終端之後繼續運作相應的程序

nohup &