上一篇                     
               
			  Linux如何运行多个进程?
- Linux
- 2025-06-26
- 4890
 Linux通过fork创建新进程,exec加载程序执行新任务,内核调度器为每个进程分配CPU时间片,通过快速切换实现多个进程的并发执行。
 
Linux多进程运行原理
Linux内核通过分时调度管理进程:
- 进程创建:父进程调用fork()生成子进程(复制父进程资源),子进程通过exec()加载新程序。
- 进程调度:内核按优先级分配CPU时间片,实现多进程“运行。
- 进程状态:运行(Running)、就绪(Ready)、休眠(Sleeping)等状态动态切换。
运行多个进程的5种方法
使用 & 符号(后台运行)
 
在命令末尾添加 &,进程在后台启动,不阻塞终端:
$ command1 & # 启动第一个后台进程 $ command2 & # 启动第二个后台进程
- 查看后台进程:jobs -l
- 调回前台:fg %1(1为作业编号)
- 终止后台进程:kill %1
nohup(脱离终端运行)
 
进程在终端关闭后仍继续运行,输出默认保存到nohup.out:
$ nohup command1 & # 免疫SIGHUP信号 $ nohup command2 > output.log 2>&1 & # 重定向输出
screen 或 tmux(会话管理)
 
创建虚拟终端会话,进程与终端解耦:

$ screen -S my_session # 创建会话 $ command1 # 在会话中运行程序 Ctrl+A D # 脱离会话 $ screen -r my_session # 恢复会话
tmux 更现代,支持分屏和脚本化操作。
systemd(系统服务管理)
 
将进程注册为系统服务,开机自启:
- 创建服务文件: sudo nano /etc/systemd/system/my_service.service 
- 写入配置: [Unit] Description=My Custom Service [Service] ExecStart=/path/to/command Restart=on-failure [Install] WantedBy=multi-user.target 
- 启动并启用服务: sudo systemctl start my_service sudo systemctl enable my_service 
脚本批量启动
通过Shell脚本顺序或并行启动:

#!/bin/bash # 顺序执行 command1 command2 # 并行执行(使用&和wait) command1 & command2 & wait # 等待所有后台进程结束
关键注意事项
-  资源监控 - 查看进程:ps aux或top
- 限制资源:ulimit -u 100(限制最大进程数)或使用cgroups控制CPU/内存。
 
- 查看进程:
-  避免进程崩溃 - 用&&连接命令:command1 && command2(仅在command1成功后运行command2)
- 设置守护进程:systemd的Restart=always确保异常退出后重启。
 
- 用
-  信号处理 - kill -9 PID强制终止进程(慎用),推荐先尝试- kill -15(优雅退出)。
- 捕获信号:在脚本中定义trap 'cleanup' SIGINT SIGTERM处理中断。
 
-  日志管理 
 重定向输出避免日志丢失: nohup command > /var/log/command.log 2>&1 & 
应用场景建议
- 临时任务:&或screen
- 长期服务:systemd或nohup
- 复杂任务流:Shell脚本结合wait控制并行度
- 集群管理:考虑Kubernetes或Docker Compose(超多进程场景)
Linux通过原生支持的多进程机制,结合&、nohup、systemd等工具,可灵活管理并发任务,关键是根据需求选择方案,并监控资源防止过载,掌握这些方法,能显著提升服务器利用率和自动化效率。
引用说明基于Linux内核文档(kernel.org)、GNU Bash手册(gnu.org)及Systemd官方指南(freedesktop.org),操作命令验证环境为Ubuntu 22.04 LTS和CentOS 9。
 
			 
			 
			 
			 
			 
			