Bash 脚本:无法正确处理 SIGTSTP

2024-03-20

我有一个 bash 脚本,用于安装和卸载设备,并在其间执行一些读取操作。由于设备速度非常慢,因此脚本大约需要 15 秒才能完成(安装至少需要 5-6 秒)。由于安装此设备可能会导致其他问题,因此我不希望此脚本被中断。

话虽如此,我可以正确处理 SIGINT (Ctrl+c),但是当我尝试处理 SIGTSTP (Ctrl+z) 时,脚本会冻结。这意味着信号被捕获但处理程序不运行。

#!/bin/sh
cleanup()
{
    # Don't worry about unmounting yet. Just checking if trap works.
    echo "Quitting..." > /dev/tty
    exit 0
}
trap 'cleanup' SIGTSTP
...

我必须手动向进程发送 KILL 信号。知道为什么会发生这种情况以及如何解决它吗?


在当前正在执行的进程终止之前,shell 不会执行陷阱。 (至少,这是 bash 3.00.15 的行为)。如果通过^c发送SIGINT,则会发送到前台进程组中的所有进程;如果当前执行的程序接收到它并终止,则 bash 可以执行陷阱。与通过 ^z 的 SIGTSTP 类似; bash 接收到信号,但不会执行陷阱,直到正在运行的程序终止,如果它采用默认行为并被挂起,则不会执行陷阱。尝试更换...用一个简单的read f并注意陷阱立即执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bash 脚本:无法正确处理 SIGTSTP 的相关文章

  • linux下如何获取昨天和前天?

    我想在变量中获取 sysdate 1 和 sysdate 2 并回显它 我正在使用下面的查询 它将今天的日期作为输出 bin bash tm date Y d m echo tm 如何获取昨天和前天的日期 这是另一种方法 对于昨天来说 da
  • Linux 中的电源管理通知

    在基于 Linux 的系统中 我们可以使用哪些方法 最简单的方法 来获取电源状态更改的通知 例如 当计算机进入睡眠 休眠状态等时 我需要这个主要是为了在睡眠前保留某些状态 当然 在计算机唤醒后恢复该状态 您只需配置即可获得所有这些事件acp
  • 错误:NVIDIA-SMI 失败,因为无法与 NVIDIA 驱动程序通信

    NVIDIA SMI 抛出此错误 NVIDIA SMI 失败 因为无法与 NVIDIA 通信 司机 确保安装了最新的 NVIDIA 驱动程序并且 跑步 我清除了 NVIDIA 并按照提到的步骤重新安装了它here https askubun
  • 如何从类似于 eclipse 的命令行创建可运行的 jar 文件

    我知道 eclipse 会生成一个可运行的 jar 文件 其中提取并包含在该 jar 文件中的所有库 jar 文件 从命令提示符手动创建 jar 文件时如何执行类似的操作 我需要将所有 lib jar 解压到类文件夹中吗 目前我正在使用 j
  • execlp 多个“程序”

    我想运行类似的东西 cat file tar base64 myprogram c base64 d tar zvt I use execlp运行该进程 当我尝试运行类似的东西时cat它有效 但如果我尝试运行base64 d tar zvt
  • 命令运行时从 shell_exec 命令获取输出

    我正在编写一个 PHP 脚本网页 该网页旨在接受先前上传到服务器的 JFFS2 图像的文件名 然后 该脚本将使用映像重新刷新服务器上的分区 并输出结果 我一直在用这个 tmp shell exec update flash v filena
  • Bash - 在 perl 正则表达式中使用变量以及匹配组

    这是我在 stackoverflow 上的第一篇文章 如果我错过了一些重要的内容 请原谅我 我目前遇到以下问题 目标是根据我准备的文件列表动态替换端口号find 这些文件中的所有端口均以数字 4 开头 有 5 位数字 现在是棘手的部分 我只
  • “grep -q”的意义是什么

    我正在阅读 grep 手册页 并遇到了 q 选项 它告诉 grep 不向标准输出写入任何内容 如果发现任何匹配 即使检测到错误 也立即以零状态退出 我不明白为什么这可能是理想或有用的行为 在一个程序中 其原因似乎是从标准输入读取 处理 写入
  • 为 Linux 安装 R 包时出错

    我试图在 R 3 3 上安装一个名为 rgeos 的包 但是当我输入 install packages rgeos 但它返回给我以下错误 其他包也会发生同样的情况 但不是所有包 gt installing source package rg
  • 如何显示 NUL 分隔数据的中间管道结果?

    如何组合以下两个命令 find print0 grep z pattern tr 0 n find print0 grep z pattern xargs 0 my command 进入单个管道 如果我不需要 NUL 分隔符那么我可以这样做
  • 套接字:监听积压并接受

    listen sock backlog 在我看来 参数backlog限制连接数量 这是我的测试代码 server initialize the sockaddr of server server sin family AF INET ser
  • 如何将长选项与 Bash getopts 内置一起使用?

    我正在尝试解析 tempBash getopts 的选项 我这样调用我的脚本 myscript temp foo bar someFile 这是我用来解析选项的代码 while getopts temp shots o option do
  • 在 shell 脚本中连接命令字符串

    我正在维护一个现有的 shell 脚本 它将命令分配给 shell 脚本中的变量 例如 MY COMMAND bin command dosomething 然后接下来 它通过执行以下操作将 参数 传递给 MY COMMAND MY ARG
  • 如何使用AWK脚本检查表的所有列数据类型? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在这里 我正在检查表中第一列的数据类型 但我想知道AWK中表的所有列数据类型 我尝试过 但只能获得一列数据类型 例如 Column 1
  • 如何让 clangd 转向 c++20

    当没有其他信息时 如何让 clangd 回退到 c 20 例如 在第一次构建之前 cmake 可以生成一个 这是在带有最新 LLVM 的 Arch Linux 上 这是通过 Emacs LSP 运行的 但这应该没有什么区别 你可以加 Com
  • 为什么减法返回 - 符号

    我对简单的减法有疑问 但我不明白出了什么问题 我的代码 start date s N cut b1 13 Treatment end date s N cut b1 13 delta expr end start echo delta de
  • git在Windows和Linux之间切换后强制刷新索引

    我有一个Windows和Linux共享的磁盘分区 格式 NTFS 它包含一个 git 存储库 约 6 7 GB 如果我只使用Windows or 只使用Linux操作 git 存储库一切正常 但是每次切换系统的时候git status命令将
  • 停止服务时单元陷入故障状态(状态=143)[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这是我的问题 我有 CentOS 和 java 进程在上面运行 Java进程是通过启动 停止脚本来操作的 它也创建了 java 实例的 p
  • 为什么在 Linux 上字符串文字的内存地址与其他字符串文字的内存地址如此不同?

    我注意到字符串文字在内存中的地址与其他常量和变量 Linux 操作系统 非常不同 它们有许多前导零 未打印 Example const char h Hi int i 1 printf p n void h printf p n void
  • 标准头文件中的 C 编译器错误 - 未定义的 C++ 定义

    我正在尝试编译 C 程序 但收到许多错误 这些错误是在标准 C 头文件 inttypes h stdio h stat h 等 中遇到的 错误的来源是以下未定义的常量 BEGIN DECLS END DECLS BEGIN NAMESPAC

随机推荐

  • RXJava - 制作一个可暂停的可观察对象(例如带有缓冲区和窗口)

    我想创建执行以下操作的可观察对象 在暂停时缓冲所有项目 立即发出项目 同时它们不会暂停 暂停 恢复触发器必须来自另一个可观察的 必须保存它才能供不在主线程上运行的可观察对象使用 并且必须保存更改主线程的暂停 恢复状态 我想用一个Behavi
  • Android - Firebase - 我需要删除每个侦听器吗?

    我做了相当多的研究 但找不到我需要的答案 我所知道的是 当我将 ValueEventListener 附加到数据库引用时 我知道稍后需要将其删除 现在发现很难解决 因为存在大量内存泄漏 我不知道的是 我还需要分离所有其他侦听器吗 这包括 F
  • java.lang.RuntimeException:android.os.TransactionTooLargeException:在片段之间导航时数据包大小 558780 字节

    我在用Bundle在活动和片段之间传输数据 当我从一个片段导航到新片段时 不传输数据或使用Bundle为了获取数据 应用程序崩溃并出现以下错误 gt gt 10 09 11 36 09 100 467 467 E JavaBinder FA
  • FragmentStatePagerAdapter 处理 getItem() 位置

    我尝试了这个 但错误的列表被绑定到回收器视图 我也尝试过 SparseArray 即使这样也不起作用 当我启动 Mainactivity 时 getItem 被调用两次 退回的仓位如何处理 我尝试返回 viewpager currentIt
  • JavaScript 未定义替换为 null

    在 JavaScript 中undefined可以重新分配 因此通常建议创建一个自执行函数 以确保 undefined 实际上是未定义的 作为备选null and undefined肯定是 但任何其他值都大致相当于null undefine
  • 无法在主机上创建 node_modules 文件夹并将主机文件夹挂载到容器

    我的 dockerfile 将运行 npm install 但是之后docker compose build即使在看到构建后 我的主机文件夹中的文件夹 node modules 仍然为空 我怎样才能获得该文件夹并反映在主机中 这是 dock
  • 内容安全策略 (CSP) 如何运作?

    我在开发者控制台中收到一堆错误 拒绝评估字符串 拒绝执行内联脚本 因为它违反了以下内容安全策略指令 拒绝加载脚本 拒绝加载样式表 这是怎么回事 内容安全策略 CSP 如何运作 我该如何使用Content Security PolicyHTT
  • DataGridView 的 CellValueChanged 与 CellValidating 事件

    为 DataGridView 实现验证逻辑代码和条件格式代码的最佳位置是什么 在我读过的许多关于该控件的书籍和文章中 似乎表明处理该控件的适当事件是 CellValidating 事件 嗯 这个名字不仅仅意味着这一点 然而 根据我的口味 此
  • 为什么 PHP 中的函数 levenshtein 有 255 个字符的限制?

    有谁知道为什么这个功能编辑 http php net manual en function levenshtein phpPHP 有 255 个字符的限制吗 这是该函数的 PHP 完整实现 正如您所看到的 有基于字符串字符长度的嵌套循环 f
  • 如何用c++发一副牌

    我的要求如下 int Deal int CardSet CardSet 将两只手分成两手CardSet争论通过了 每手牌的数量是第一个参数 应一次从当前组中取出一张牌 将牌置于交替手中 例如 如果当前集合保持2S 3S 4S 5S 6S 7
  • 具有管理员权限的 Windows 窗体启动

    我有一个 Windows 窗体应用程序 需要管理员权限才能运行 为此 我使用以下代码
  • 在Lua中,处理包含nil的可变参数的正确方法是什么?

    我正在尝试创建一个调试打印函数 它将文件句柄作为第一个参数 首先 我写一个这样的函数 function fprint f for i v in ipairs do f write tostring v f write t end f wri
  • Docker 守护进程未运行

    这方面的新手 我已经在我的 Windows PC 上安装了新版本的 Docker 我使用的是 Windows 10 专业版 我已经尝试了非常基本的 docker 命令 但它不起作用 我还以管理员身份运行 docker 总是出现以下错误 do
  • 使用 Watir-Webdriver 时 Chrome 中的默认配置文件名称?

    我下载了 Chromedriver 然后将其解压到正确的位置 usr bin 但我不知道 Chrome Chromium 浏览器的默认配置文件名称是什么 因此此行抛出错误消息 browser Watir Browser new chrome
  • 在 RMarkdown 中使用图像作为表格?

    我知道我想做的事情听起来很愚蠢 但请耐心等待 我想将表格的现有图像 PNG 插入到将转换为 pdf 的 RMarkdown 文档中 有什么办法可以做到这一点并获得图像被视为一张桌子用于编号目的 也就是说 显然我可以做 A caption f
  • realpath 函数的转换问题(C 编程)

    当我编译以下代码时 define POSIX C SOURCE 200112L define ISOC99 SOURCE define EXTENSIONS include
  • DalvikVM 上的 CLI 在 JNI 库上失败

    我需要在 Android 上运行 java 应用程序的命令行版本 是的 我知道这并不简单 我尝试使用 Dalvikvm 启动它 它实际上启动了 但后来我的代码失败了 因为它开始使用 android util log 并抛出此异常 java
  • 如何在 Apache 网站内托管 ASP.NET Core Web 应用程序?

    我有一个旧的php使用开发的应用程序Yii2框架托管在Centos路径上的服务器 var www html 该应用程序可在以下位置访问http somedomain com 我正在开发使用新的 API 项目ASP NET MVC Core需
  • 在 IntelliJ IDEA 中运行时出现 java.lang.ClassNotFoundException

    我创建一个使用数据库的程序 在 IntelliJ IDEA 中编译时出现以下错误 有人知道为什么会发生这种情况以及我该如何解决它吗 您收到的错误不是在编译时发生的 而是在您尝试运行应用程序时发生的 发生这种情况是因为 Java 无法找到Ta
  • Bash 脚本:无法正确处理 SIGTSTP

    我有一个 bash 脚本 用于安装和卸载设备 并在其间执行一些读取操作 由于设备速度非常慢 因此脚本大约需要 15 秒才能完成 安装至少需要 5 6 秒 由于安装此设备可能会导致其他问题 因此我不希望此脚本被中断 话虽如此 我可以正确处理