在 Linux 系统中,建立和关闭进程是系统管理的核心操作之一。以下是详细的步骤和扩展知识:
1. 建立进程
1.1 通过命令行启动进程
直接运行程序:
输入可执行文件路径或命令(如 `./script.sh` 或 `python3 app.py`),系统会创建新进程。
后台运行:
在命令后加 `&`(如 `./server &`),进程会在后台运行,终端可继续输入命令。
1.2 使用 `fork()` 和 `exec()`
系统调用:
C 程序可通过 `fork()` 创建子进程,`exec()` 替换子进程的地址空间(如 `execvp()` 加载新程序)。
c
pid_t pid = fork();
if (pid == 0) { execl("/bin/ls", "ls", NULL); } // 子进程运行 ls
解释语言:
Python 的 `os.fork()` 或 `subprocess.Popen()` 也可实现。
1.3 计划任务
`cron` 定时任务:
编辑 `/etc/crontab` 或 `crontab -e` 配置定时执行的进程。
`at` 单次任务:
如 `echo "cmd" | at 15:00` 在指定时间运行一次。
1.4 守护进程(Daemon)
通过双次 `fork()` 脱离终端,并通常由 `systemd` 管理(如 `systemctl start nginx`)。
2. 关闭进程
2.1 通过信号终止
`kill` 命令:
- `kill
- `kill -9
按名称终止:
`pkill -f "process_name"` 或 `killall process_name`。
2.2 前台进程的终止
快捷键:
`Ctrl+C` 发送 `SIGINT`(中断前台进程),`Ctrl+Z` 发送 `SIGTSTP`(暂停并放入后台)。
2.3 关闭整个进程树
`pstree` 和 `kill`:
先用 `pstree -p
2.4 资源耗尽时的终止
OOM Killer:
当内存不足时,内核自动终止占用资源最多的进程(通过 `dmesg` 查看日志)。
3. 高级扩展
进程状态监控:
`top`、`htop` 或 `ps aux` 查看进程状态及资源占用。
信号处理:
进程可通过 `signal()` 或 `sigaction()` 捕获信号(如 `SIGTERM`)实现优雅退出。
进程间通信(IPC):
管道、共享内存、信号量等机制可协调多进程操作。
`systemd` 管理:
现代 Linux 使用 `systemctl stop/restart service` 管理守护进程。
4. 注意事项
强制终止(`SIGKILL`)可能导致数据损坏,优先尝试 `SIGTERM`。
子进程需正确处理父进程终止后的状态(避免僵尸进程,用 `wait()` 回收资源)。
后台进程的输出可能占用终端,建议重定向到文件(如 `cmd > log.txt 2>&1`)。
查看详情
查看详情