当前位置:首页 > 主机动态 > 正文

Linux如何停止sh脚本?

要关闭运行中的.sh脚本,在终端按Ctrl+C中断前台进程,若后台运行,先用ps找进程ID,再用kill [PID]终止。

在Linux系统中,关闭(终止)正在运行的 .sh 文件(Shell脚本)需要通过系统命令中断其进程,以下是详细操作步骤及方法:


理解进程终止原理

.sh 文件本身不是“服务”,而是通过Shell解释器(如/bin/bash)运行的脚本,关闭操作实际是终止其对应的进程,根据脚本运行状态选择不同方法:


终止前台运行的脚本

若脚本正在终端前台运行(例如通过 ./test.sh 启动):

  1. 快捷键终止

    按下 Ctrl + C 组合键,立即中断脚本。

    Linux如何停止sh脚本? 第1张

    # 示例:运行后按 Ctrl+C $ ./test.sh ^C # 脚本被强制终止
  2. 快捷键暂停

    若需临时暂停(非终止),按 Ctrl + Z 将脚本挂起到后台,再手动终止:

    $ ./test.sh ^Z # 暂停脚本,返回终端 [1]+ Stopped ./test.sh $ jobs -l # 查看后台任务(显示进程ID) [1]+ 12345 Stopped ./test.sh $ kill -9 12345 # 强制终止该进程


终止后台运行的脚本

若脚本在后台启动(./test.sh &):

  1. 通过 jobs 查找任务ID

    Linux如何停止sh脚本? 第2张

    $ jobs -l # 列出后台任务及进程ID [1]- 23456 Running ./test.sh &
  2. 终止指定任务

    $ kill %1 # 终止任务ID为1的后台任务 # 或 $ kill 23456 # 直接终止进程ID


通过进程名/ID全局终止

若脚本未在当前终端运行,或需精确终止:

  1. 查找进程ID(PID)

    使用 ps 或 pgrep 定位进程:

  2. 终止进程

    Linux如何停止sh脚本? 第3张

    • 正常终止(允许资源清理): $ kill 34567 # 发送SIGTERM信号
    • 强制终止(立即结束,可能丢失数据): $ kill -9 34567 # 发送SIGKILL信号
    • 按进程名批量终止

      $ pkill -f test.sh # 终止所有匹配"test.sh"的进程 # 或 $ killall -9 test.sh # 强制终止同名进程(需安装killall)
    • 特殊情况处理

      1. 脚本卡死无响应

        优先用 kill -9 PID 强制终止,再检查脚本逻辑。

      2. 脚本产生子进程

        使用 pkill -P PID 终止子进程,或通过进程组终止:

        $ kill -- -PGID # 注意负号表示进程组ID


      注意事项

      1. 数据安全

        kill -9 是强制终止,可能导致未保存数据丢失,优先尝试 kill PID(默认SIGTERM)。

      2. 权限要求

        普通用户只能终止自己的进程,系统级脚本需 sudo 提权。

      3. 确认进程状态

        终止后执行 ps aux | grep test.sh 确认进程已退出。


      总结步骤

      1. 定位脚本进程 → ps aux | grep 脚本名
      2. 根据运行状态选择方法 → 前台(Ctrl+C)、后台(jobs)、全局(pkill)
      3. 发送终止信号 → kill [信号] PID
      4. 验证结果 → 再次检查进程列表

      引用说明基于Linux内核标准进程管理机制,参考《Linux命令行与Shell脚本编程大全》及GNU Coreutils文档,操作命令兼容主流Linux发行版(Ubuntu/CentOS/Debian等)。

0