进程管理

进程及作业管理


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开头的服务;


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