Linux如何运行多个进程?

Linux通过fork创建新进程,exec加载程序执行新任务,内核调度器为每个进程分配CPU时间片,通过快速切换实现多个进程的并发执行。

Linux多进程运行原理

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 &  # 重定向输出

screentmux(会话管理)

创建虚拟终端会话,进程与终端解耦:

$ screen -S my_session  # 创建会话
$ command1              # 在会话中运行程序
Ctrl+A D                # 脱离会话
$ screen -r my_session  # 恢复会话

tmux 更现代,支持分屏和脚本化操作。

systemd(系统服务管理)

将进程注册为系统服务,开机自启:

Linux如何运行多个进程?

  1. 创建服务文件:
    sudo nano /etc/systemd/system/my_service.service
  2. 写入配置:
    [Unit]
    Description=My Custom Service
    [Service]
    ExecStart=/path/to/command
    Restart=on-failure
    [Install]
    WantedBy=multi-user.target
  3. 启动并启用服务:
    sudo systemctl start my_service
    sudo systemctl enable my_service

脚本批量启动

通过Shell脚本顺序或并行启动:

#!/bin/bash
# 顺序执行
command1
command2
# 并行执行(使用&和wait)
command1 &
command2 &
wait  # 等待所有后台进程结束

关键注意事项

  1. 资源监控

    • 查看进程:ps auxtop
    • 限制资源:ulimit -u 100(限制最大进程数)或使用cgroups控制CPU/内存。
  2. 避免进程崩溃

    • &&连接命令:command1 && command2(仅在command1成功后运行command2)
    • 设置守护进程:systemdRestart=always确保异常退出后重启。
  3. 信号处理

    • kill -9 PID 强制终止进程(慎用),推荐先尝试kill -15(优雅退出)。
    • 捕获信号:在脚本中定义trap 'cleanup' SIGINT SIGTERM处理中断。
  4. 日志管理
    重定向输出避免日志丢失:

    Linux如何运行多个进程?

    nohup command > /var/log/command.log 2>&1 &

应用场景建议

  • 临时任务&screen
  • 长期服务systemdnohup
  • 复杂任务流:Shell脚本结合wait控制并行度
  • 集群管理:考虑KubernetesDocker Compose(超多进程场景)

Linux通过原生支持的多进程机制,结合&nohupsystemd等工具,可灵活管理并发任务,关键是根据需求选择方案,并监控资源防止过载,掌握这些方法,能显著提升服务器利用率和自动化效率。

引用说明基于Linux内核文档(kernel.org)、GNU Bash手册(gnu.org)及Systemd官方指南(freedesktop.org),操作命令验证环境为Ubuntu 22.04 LTS和CentOS 9。

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/39479.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月26日 17:00
下一篇 2025年6月26日 17:05

相关推荐

  • Linux如何识别U盘

    Linux中查看U盘插入情况,可使用以下命令:,1. **lsblk**:列出所有块设备(如磁盘、分区),U盘通常显示为sdb、sdc等(非sda),并显示其挂载点。,2. **sudo fdisk -l**:列出详细磁盘分区信息,需管理员权限。,3. **df -h**:查看已挂载的文件系统及其使用情况,包含U盘。,4. **mount | grep /dev/sd**:过滤显示已挂载的USB设备(如/dev/sdb1)。

    2025年6月21日
    100
  • 如何在Linux系统中查看Excel文件?

    Linux可通过LibreOffice Calc或WPS Office直接打开Excel文件,也可使用命令行工具如xlsx2csv将表格转为CSV文本查看,在线工具Google Sheets或OnlyOffice也支持浏览器导入编辑,适用于无需安装本地软件的场景。

    2025年5月28日
    300
  • Linux如何快速查看开放哪些端口?

    在Linux系统中,查看开放端口(监听状态)的常用命令有:,1. netstat -tuln:列出TCP/UDP监听端口。,2. ss -tuln:更快速的替代命令,功能类似。,3. lsof -i -P -n | grep LISTEN:列出监听端口的进程信息。

    2025年6月15日
    000
  • 快速安装Linux内核源码指南

    安装Linux内核源码包通常通过包管理器实现,在Debian/Ubuntu系统使用apt install linux-source命令,在RHEL/CentOS系统使用yum install kernel-devel命令,安装后源码默认存放于/usr/src/目录下。

    2025年6月13日
    000
  • Linux如何强制终止进程?

    在Linux中终止进程主要使用kill命令后接进程ID(PID),或killall命令后接进程名,强制终止可添加-9选项,如kill -9 PID或killall -9 进程名,需注意操作权限。

    2025年6月24日
    000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN