1.进程的概念
进程—运⾏中的程序,从程序开始运⾏到终⽌的整个⽣命周期是可管理的 C 程序的启动是从 main 函数开始的
int main(int agrc, char *argv[])
- 终⽌的⽅式并不唯⼀,分为正常终⽌和异常终⽌
- 正常终⽌也分为从 main 返回、调⽤ exit 等⽅式
- 异常终⽌分为调⽤ abort、接收信号等
命令
# ps
ps -e | more # -e 显示所有进程
ps -eLf # -l 代表长格式,-f 代表完整的格式
pstree
top
- 进程也是树形结构
- 进程和权限有着密不可分的关系
2.进程的作业控制 (进程的前台和后台的切换)
./a.sh & # 尾部加上 & 后,会在后台运行
# 注意 & 只是让程序后台运行,当前终端关闭依然会关闭程序
jobs # 查看当前后台运行列表
fg 对应编号 # 调用会前台
ctrl + z # 临时挂起 ,程序保存在内存中暂停
jobs # 继续查看
fg 对应编号 # front 调用会前台,继续运行
bg 对应编号 # back 调用会后台,继续运行
注意: 无论是前台还是后台运行,只要终端退出,进程都会被杀死
3.守护进程 nohup
- 使⽤ nohup 与 & 符号配合运⾏⼀个命令
- nohup 命令使进程忽略 hangup(挂起)信号
- ⼀般进程 终端退出则只需hangup退出
- 守护进程(daemon) 即使终端退出,也不会杀死进程
# 阻塞进程
# 新开一个终端,执行下面命令
tail -f /var/log/messages
# 查看tail进程
ps -ef | grep tail
# 关闭tail -f 的窗口 进程就会关闭
# ps -ef里面看不到直接的进程
# nohup
nohup tail -f /var/log/messages # 使用nohup 可以在终端关闭依然保留程序
# 使⽤ screen 命令
yum install screen
screen # 进⼊ screen 环境
ctrl+a d # 退出 (detached) screen 环境
screen -ls # 查看 screen 的会话
screen -r sessionid # 恢复会话
## 系统⽇志
/var/log
message # 系统常用日志
dmesg # 系统内核启动日志
cron # 周期任务日志
secure # 系统的安全日志
4.进程间通信
信号是进程间通信⽅式之⼀,典型⽤法是:终端⽤户输⼊中断命令,通过信号机制停⽌⼀个程序的运⾏
# 使⽤信号的常⽤快捷键和命令
kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
# SIGINT
ctrl + c # 通知前台进程组终⽌进程
# SIGKILL
kill -9 pid # ⽴即结束程序,不能被阻塞和处理
进程的优先级调整
nice # 范围从-20 到 19 ,值越⼩优先级越⾼,抢占资源就越多
renice # 重新设置优先级
# 进程与子进程关系
./a.sh # 这种启动走的是同一个进程
# 写一个死循环
#!/bin/bash
echo $$
while :
do
:
done
# 程序会一直卡住,因为子进程复用了父进程
# 查看进程情况
top -p pid
#PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
16223 root 20 0 113288 1196 1016 R 100.0 0.0 3:57.25 a.sh
NI #就是优先级
# 改变启动的优先级
nice -n 10 ./a.sh # 执行后 NI从0变为10
# S标识运行的状态 R运行中,T为暂停
# 动态修改正在运行的nice
rnice -n 15 pid