Linux 进程管理
# Linux 进程管理
本章全面介绍 Linux 进程管理,包括进程与线程的区别、前后台进程管理、进程状态与信号、systemd
进程管理,以及定时任务管理(crontab
、at
、anacron
)。
# 1. 什么是进程?进程 vs 线程
# (1)进程(Process)
进程是计算机中执行的程序实例,每个进程都有自己的内存空间、文件描述符和资源。进程是独立的,进程之间不能直接共享内存。
查看当前系统的进程数:
ps aux | wc -l
1
# (2)线程(Thread)
线程是进程中的执行单元,一个进程可以包含多个线程(多线程)。线程共享进程的资源(如内存、文件句柄),但有独立的执行栈和 CPU 寄存器。
多线程示例:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
void* thread_func(void* arg) {
printf("Thread %ld is running\n", (long)arg);
return NULL;
}
int main() {
pthread_t tid;
pthread_create(&tid, NULL, thread_func, (void*)1);
pthread_join(tid, NULL);
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
编译并运行:
gcc -pthread thread.c -o thread
./thread
1
2
2
# 2. 前台进程与后台进程(&,nohup,jobs,bg,fg)
# (1)后台运行进程
使用 &
让进程在后台运行:
ping google.com > ping.log &
1
# (2)查看后台进程
jobs -l
1
# (3)将进程转入后台
Ctrl + Z # 暂停前台进程
bg %1 # 让任务号 1 的进程在后台继续运行
1
2
2
# (4)将后台进程恢复到前台
fg %1
1
# (5)使用 nohup
保持进程运行
nohup
让进程在退出终端后仍然运行:
nohup my_script.sh &
disown -h %1 # 让任务号 1 的进程脱离终端
1
2
2
# 3. 进程状态与信号(ps, top, kill, nice, renice)
# (1)查看进程信息
ps aux # 查看所有进程
ps -ef # 以不同格式显示进程
1
2
2
# (2)监控进程
top # 实时监控进程
htop # 更美观的进程监控工具(需安装)
1
2
2
# (3)终止进程
kill -9 <PID> # 强制杀死进程
kill -15 <PID> # 发送 SIGTERM 信号(优雅终止)
1
2
2
# (4)调整进程优先级
nice
设置进程优先级:
nice -n 10 myscript.sh
1
renice
调整运行中的进程优先级:
renice -n 5 -p <PID>
1
# 4. systemd 进程管理(systemctl,service)
# (1)启动、停止、重启服务
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
1
2
3
2
3
# (2)查看服务状态
systemctl status nginx
1
# (3)启用/禁用开机启动
systemctl enable nginx
systemctl disable nginx
1
2
2
# (4)使用 service
命令管理进程
service nginx status
1
# 5. 定时任务管理(crontab, at, anacron)
# (1)使用 crontab
crontab -e # 编辑当前用户的定时任务
crontab -l # 查看当前用户的定时任务
1
2
2
示例:每天凌晨 2 点执行备份:
0 2 * * * /usr/bin/backup.sh
1
# (2)使用 at
echo "echo Hello > /tmp/hello.txt" | at now + 5 minutes
1
# (3)使用 anacron
(适用于非 24 小时运行的机器)
编辑 /etc/anacrontab
:
1 5 backup-job /usr/bin/backup.sh
1
编辑 (opens new window)
上次更新: 2025/04/01, 01:48:12