为什么我在 bash 中的kill -9 命令上没有收到信号SIGKILL?

2024-01-12

在 bash 脚本中,我按如下方式处理不同的信号:

#!/bin/bash

sighdl () 
{
  echo "signal caught"
  #do something
  exit 0
}

trap sighdl SIGKILL SIGINT SIGTERM

上面的代码正确处理以下活动的信号:

  1. Ctrl+C
  2. kill pid
  3. pkill scriptname

For kill -9 pid它不调用sighdl。据我的理解(如果我没记错的话)kill -9发送 SIGKILL 信号。

任何想法?


你不能这样做。是的 9 是SIGKILLUnix 系统的设计不允许任何脚本/程序陷入陷阱SIGKILL由于安全原因。否则,任何脚本都可以捕获并忽略 SIGKILL,这将导致操作系统无法终止该脚本。

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

为什么我在 bash 中的kill -9 命令上没有收到信号SIGKILL? 的相关文章

  • 尽管 EXPORT_SYMBOL 模块插入时出现“模块中的未知符号”

    我正在尝试编译并插入 r8169 realtek 以太网驱动程序 我的内核版本是 ebin sony uname r 4 2 0 rc3 custom 我的本地磁盘中有相同的完整源代码 用于安装当前的内核 当我运行时该模块编译成功make
  • 如何重新安装cudnn?

    安装Cudnn 4 0 4后 我发现如果我想运行我下载的代码 我需要更高版本的Cudnn 然后我下载 cudnn 7 0 linux x64 v4 0 prod tgz 并直接按以下顺序安装 sudo cp include cudnn h
  • gai_cancel() 需要很长时间才能成功

    我正在尝试在 C 中异步查找域 原因是我希望能够有效地添加超时期限 以防系统无法查找域 我遇到了 getaddrinfo a 命令 所以我决定尝试一下 然而 在我的机器上取消任何不会成功的 dns 查找 例如没有互联网连接时 永远不会花费少
  • 为什么不使用 sshrc 中设置的 $PATH?

    我正在尝试在 OS X 服务器上通过 ssh 设置 svn 为了做到这一点 我读到我需要一个包装器来设置 umask 并 在我的例子中 设置存储库根 一种快速而肮脏的方法是重命名 usr bin svnserve并将包装器脚本放置在该位置
  • Linux 上共享内存的生命周期是多长

    我正在使用 ftok shmget shmat shmdt 函数在 Linux 上创建 写入和读取共享段 如果我写入一个程序中的段 然后退出 然后稍后从另一个程序中读取该段 我会惊讶地发现数据仍然存在 我预计当共享一个段的最后一个进程执行
  • 有人可以解释一下以下内存分配 C 程序的性能行为吗?

    在我的机器上 时间 A 和时间 B 交换取决于是否A是 定义或未定义 这会改变两个的顺序 callocs 被称为 我最初将此归因于寻呼系统 奇怪的是 当mmap被用来代替calloc 情况更加奇怪 两个循环花费的时间相同 正如预期的那样 作
  • C++向量数组运算符计算成本高?

    我一直都知道 C 的丰富抽象会带来一定的计算开销 但我的印象是 一旦应用了正确的编译器优化 这种开销几乎可以忽略不计 我很好奇这种开销到底有多大 所以我编写了一个简单的测试来确定这一点 该测试是一个模板化函数 它接受一个容器变量 为容器中的
  • 我应该如何从非 root Debian Linux 守护进程登录?

    我正在编写一个新的守护进程 它将托管在 Debian Linux 上 我发现 var log 具有仅 root 写入权限 因此我的守护进程无法在那里写入日志文件 但是 如果它写入那里 它似乎将获得自动日志轮转 并且也按照用户期望的方式工作
  • 获取所有 JVM 使用的所有 Java 类的列表?

    我想要一个在某个时刻在多个线程 JVM 中加载的所有类的列表 我知道当你运行java时 verbose参数 您可以将其写入文件 如下所示 java verbose class com package Foo gt classes used
  • c - 后台运行的程序的退出状态

    我有一个任务 其中我必须创建一个迷你 shell 它能够执行很多操作 包括作业控制 我设法使用 fork 和 execvp 创建新的工作 但我还想获取 execvp 运行的程序的退出代码 根据我从其他帖子中查找到的内容 我可以使用以下方法来
  • shell脚本响应按键

    我有一个 shell 脚本 本质上是这样的 while true do read r input if input a then echo hello world fi done 这一切都很好 但我刚刚意识到在这种情况下必须按 ENTER
  • 如何在 shell 中解码 URL 编码的字符串?

    我有一个文件 其中包含已编码的用户代理列表 例如 Mozilla 2F5 0 20 28Macintosh 3B 20U 3B 20Intel 20Mac 20OS 20X 2010 6 3B 20en 我想要一个 shell 脚本 它可以
  • 检测目录中是否有某些内容被修改,如果是,则备份 - 否则不执行任何操作

    我有一个 数据 目录 我通过 shell 脚本定期同步到远程 NAS 但是 我想让这变得更有效率 我想在运行 rsync 之前检测 数据 中是否发生了变化 这样我就不会不必要地唤醒 NAS 上的驱动器 我正在考虑修改 shell 脚本以获取
  • H.323,如何制作一个没有媒体的简单环。该脚本遵循 Q.931 设置,但仍然无法正常工作

    谁能帮我解决这个问题吗 当我发送此请求时 我在wireshark中看到数据包将发送到1720 tcp端口中的SJPhone 但 SJPhone 仍然没有响铃 我想让它响起 无论媒体 我非常感谢您的支持 我一定缺少消息协议细节来实现这个 请给
  • 使用环境变量将参数传递给命令

    我正在尝试编写一个 bash 脚本 该脚本采用环境变量并将其传递给命令 所以如果我有类似的东西 export OUT a arg1 b arg2 0 arg2 1 我想在我的 bash 脚本中执行以下操作
  • 错误:选项“Z”仅在夜间编译器上被接受[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在通过斯坦福操作系统课程 cs140e https web stanford edu class cs140e 其中一个问题是 有一个名
  • 使用sed插入文件内容

    我试图在给定模式之前插入文件内容 这是我的代码 sed i pattern i r scriptPath adapters default permissions xml manifestFile 它添加路径而不是文件的内容 有任何想法吗
  • 如何在不需要设置 LD_LIBRARY_PATH shell 变量的情况下输入“cargo run”?

    我构建了一个 Rust 程序 通过 C 接口调用 C 函数 为了执行该程序 我必须运行 export LD LIBRARY PATH
  • 从外部 bash 设置环境变量

    我试图使用 PHP 从命令行 设置 bash 环境变量 但没有成功 buff array buff VARTESTKEY VARTESTVALUE buff export VARTESTKEY file put contents scrip
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的

随机推荐