進程及作業管理
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開頭的服務;