進程管理

進程及作業管理


Uninterruptible sleep: 不可中斷的睡眠

Interruptible sleep:可中斷睡眠




kernel:

init: 


COW: Copy On Write, 寫時複製




100-139:用戶可控制

0-99:內核調整的


O:

O(1)

O(n)

O(logn)

O(n^2)

O(2^n)

init: 進程號爲1


ps: Process State

SysV風格:-

BSD風格:

a: 所有與終端有關的進程 

u:

x: 所有與終端無關的進程

進程的分類:

跟終端相關的進程

跟終端無關的進程


進程狀態:

D:不可中斷的睡眠

R:運行或就緒

S:可中斷的睡眠

T:停止

Z:僵死

<:高優先級進程

N: 低優先級進程

+:前臺進程組中的進程

l: 多線程進程

s: 會話進程首進程


ps

-elF

-ef

-eF


ps -o PROPERTY1,PROPERTY2


ps -o pid,comm,ni


pstree: 顯示當前系統上的進程樹


pgrep:

pidof: 根據程序名稱,查找其相關進程的ID號;

top:




vmstat

free

kill

pkill

bg

fg




<:高優先級的進程

N:低優先級的進程

l: 多線程進程

+:前臺進程組中的進程

s: 會話進程的領導者



top:

M: 根據駐留內存大小進行排序

P:根據CPU使用百分比進行排序

T: 根據累計時間進行排序

l: 是否顯示平均負載和啓動時間

t: 是否顯示進程和CPU狀態相關信息

m: 是否顯示內存相關信息

c: 是否顯示完整的命令行信息

q: 退出top

k: 終止某個進程


top 

-d: 指定延遲時長,單位是秒

-b: 批模式

-n #:在批模式下,共顯示多少批

進程間通信(IPC: Inter Process Communication)

共享內存

信號: Signal

Semaphore

重要的信號:

1:SIGHUP: 讓一個進程不用重啓,就可以重讀其配置文件,並讓新的配置信息生效;

2: SIGINT:Ctrl+c: 中斷一個進程

9: SIGKILL:殺死一個進程

15: SIGTERM:終止一個進程, 默認信號

指定一個信號:

信號號碼:kill -1

信號名稱:kill -SIGKILL

信號名稱簡寫:kill -KILL


kill PID

killall COMMAND



調整nice值:

調整已經啓動的進程的nice值:

renice NI PID


在啓動時指定nice值:

nice -n NI COMMAND




前臺作業:佔據了命令提示符

後臺作業:啓動之後,釋放命令提示符,後續的操作在後臺完成


前臺-->後臺:

Ctrl+z: 把正在前臺的作業送往後臺

COMMAND &:讓命令在後臺執行

bg: 讓後臺的停止作業繼續運行

bg [[%]JOBID]


jobs: 查看後臺的所有作業

作業號,不同於進程號

+:命令將默認操作的作業

-:命令將第二個默認操作的作業

fg: 將後臺的作業調回前臺

fg [[%]JOBID]

kill %JOBID: 終止某作業




vmstat:系統狀態查看命令

uptime:


/proc/meminfo




./configure: 

檢查編譯環境:編譯工具、庫、頭文件

設定編譯安裝選項

結果:結果Makefile.in生成makefile

make

make install






日誌系統


Linux系統啓動流程


PC: OS(Linux)


POST-->BIOS(Boot Sequence)-->MBR(bootloader,446)-->Kernel-->initrd-->(ROOTFS)/sbin/init(/etc/inittab)



啓動的服務不同:

運行級別:0-6

0:halt

1: single user mode, 直接以管理員身份切入, s,S,single

2:multi user mode, no NFS

3: multi user mode, text mode

4:reserved

5: multi user mode, graphic mode

6: reboot


詳解啓動過程

bootloader(MBR)

LILO: LInux LOader

GRUB: GRand Unified Bootloader

Stage1: MBR

Stage1_5: 

Stage2: /boot/grub/


grub.conf


default=0  # 設定默認啓動的title的編號,從0開始

timeout=5  # 等待用戶選擇的超時時長,單位是秒

splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz  # grub的背景圖片

hiddenmenu # 隱藏菜單

password redhat

password --md5 $1$HKXJ51$B9Z8A.X//XA.AtzU1.KuG.

title Red Hat Enterprise Linux Server (2.6.18-308.el5)  # 內核標題,或操作系統名稱,字符串,可自由修改

root (hd0,0)  # 內核文件所在的設備;對grub而言,所有類型硬盤一律hd,格式爲(hd#,N);hd#, #表示第幾個磁盤;最後的N表示對應磁盤的分區;

kernel /vmlinuz-2.6.18-308.el5 ro root=/dev/vol0/root rhgb quiet   # 內核文件路徑,及傳遞給內核的參數

initrd /initrd-2.6.18-308.el5.img # ramdisk文件路徑

password --md5 $1$HKXJ51$B9Z8A.X//XA.AtzU1.KuG.

title Install Red Hat Enterprise Linux 5

root (hd0,0)

kernel /vmlinuz-5 ks=http://172.16.0.1/workstation.cfg ksdevice=eth0 noipv6

initrd /initrd-5

password --md5 $1$FSUEU/$uhUUc8USBK5QAXc.BfW4m.




查看運行級別:

runlevel: 

who -r


查看內核release號:

uname -r




安裝grub stage1:

# grub

grub> root (hd0,0)

grub> set (hd0)


安裝grub第二種方式:

# grub-install --root-directory=/path/to/boot's_parent_dir  /PATH/TO/DEVICE



grub> find 

grub> root (hd#,N)

grub> kernel /PATH/TO/KERNEL_FILE

grub> initrd /PATH/TO/INITRD_FILE

grub> boot




Kernel初始化的過程:

1、設備探測

2、驅動初始化(可能會從initrd(initramfs)文件中裝載驅動模塊)

3、以只讀掛載根文件系統;

4、裝載第一個進程init(PID:1)



/sbin/init:(/etc/inittab)

upstart: ubuntu, d-bus, event-driven

systemd: 


id:runlevels:action:process

id: 標識符

runlevels: 在哪個級別運行此行;

action: 在什麼情況下執行此行;

process: 要運行程序; 


id:3:initdefault:


si::sysinit:/etc/rc.d/rc.sysinit



ACTION:

initdefault: 設定默認運行級別

sysinit: 系統初始化

wait: 等待級別切換至此級別時執行

respawn: 一旦程序終止,會重新啓動




/etc/rc.d/rc.sysinit完成的任務:

1、激活udev和selinux;

2、根據/etc/sysctl.conf文件,來設定內核參數;

3、設定時鐘時鐘;

4、裝載鍵盤映射;

5、啓用交換分區;

6、設置主機名;

7、根文件系統檢測,並以讀寫方式重新掛載;

8、激活RAID和LVM設備;

9、啓用磁盤配額;

10、根據/etc/fstab,檢查並掛載其它文件系統;

11、清理過期的鎖和PID文件;




for I in /etc/rc3.d/K*; do

  $I stop

done


for I in /etc/rc3.d/S*; do

  $I start

done





##: 關閉或啓動的優先次序,數據越小越優先被選定

先關閉以K開頭的服務,後啓動以S開頭的服務;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章