你更愿意要钱还是自由?

挂起进程的原理

Linux通过信号(Signal)控制进程状态:

  • SIGSTOP (19):强制暂停进程(不可被进程忽略)。
  • SIGCONT (18):恢复被暂停的进程。
  • SIGTSTP (20):终端发出的暂停信号(可被进程捕获处理)。

操作步骤

查找目标进程ID(PID)

使用 pspgrep 定位进程:

ps aux | grep "进程名"  # 示例:ps aux | grep nginxpgrep -f "进程名"      # 示例:pgrep -f python

输出示例:

ubuntu   12345  0.5  1.2 215000 9400 ?        Sl   10:00   0:01 nginx: worker process

此处 12345 即目标PID。

挂起进程

通过 kill 命令发送 SIGSTOP 信号:

kill -SIGSTOP 12345  # 将12345替换为实际PID

或使用信号编号:

kill -19 12345

验证进程状态

检查进程是否暂停:

ps -o pid,state,cmd -p 12345

输出中 STATE 列为 T(暂停)或 T+(前台暂停)即表示成功。

恢复进程

发送 SIGCONT 信号恢复运行:

kill -SIGCONT 12345  # 或 kill -18 12345

其他挂起方法

方法1:通过作业控制(适用于前台进程)

  1. 运行程序(如 ./my_script.sh)。
  2. Ctrl+Z 发送 SIGTSTP 信号挂起。
  3. 输入 bg 切到后台运行,或 fg 恢复前台。

方法2:使用 pkillkillall(按进程名操作)

pkill -STOP "进程名"    # 挂起:pkill -19 "nginx"
killall -SIGCONT "进程名" # 恢复

注意事项

  1. 权限要求

    • 普通用户只能挂起自己的进程。
    • 系统进程需 sudo 权限(如 sudo kill -19 PID)。
  2. 风险规避

    • 关键服务(如数据库)挂起可能导致数据丢失,务必提前保存状态。
    • 避免挂起系统核心进程(如 systemdinit)。
  3. 状态确认

    • 挂起后进程仍占用内存,但停止CPU占用。
    • 长期暂停可能触发系统监控告警(如 systemd 重启服务)。
  4. 信号选择

    • SIGSTOP(19)确保立即暂停(推荐)。
    • SIGTSTP(20)允许进程清理后暂停(如保存临时文件)。

典型应用场景

  • 资源调控:暂停非紧急任务(如备份脚本),保障高优先级进程运行。
  • 调试程序:冻结进程状态以检查内存或文件句柄。
  • 批量管理:结合脚本暂停/恢复一组进程(如 pkill -STOP -f "pattern")。

挂起Linux进程的核心是 kill -19 PID(暂停)kill -18 PID(恢复),操作前务必确认PID准确性,并评估对系统的影响,对于生产环境,建议在测试后操作,或使用进程管理工具(如 systemctl pause 服务)实现更安全的控制。

引用说明基于Linux内核信号处理机制(参见 man 7 signal)及GNU Coreutils工具集(killps等)的官方文档,实践方法参考Linux系统管理员社区(如Server Fault)的通用操作规范。

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

(0)
酷番叔酷番叔
上一篇 2025年7月31日 11:17
下一篇 2025年7月31日 11:31

相关推荐

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信