加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 模拟阻塞系统调用中的进程

发布时间:2020-12-14 01:19:46 所属栏目:Linux 来源:网络整理
导读:我正在尝试测试在受控环境中难以重现的行为. 使用案例: Linux系统;通常是Redhat EL 5或6(我们刚刚开始使用RHEL 7和systemd,所以它目前已超出范围). 在某些情况下我需要重新启动服务.我们用来停止服务的脚本通常运行得很好;它将SIGTERM发送到进程,该进程旨在
我正在尝试测试在受控环境中难以重现的行为.

使用案例:
Linux系统;通常是Redhat EL 5或6(我们刚刚开始使用RHEL 7和systemd,所以它目前已超出范围).

在某些情况下我需要重新启动服务.我们用来停止服务的脚本通常运行得很好;它将SIGTERM发送到进程,该进程旨在处理它;如果进程在超时(通常是几分钟)内没有处理SIGTERM,脚本会发送一个SIGKILL,然后等待几分钟.

问题是:在某些(罕见)情况下,进程在SIGKILL之后不会退出;这通常发生在它严重停留在系统调用上时,可能是因为内核级问题(损坏的文件系统,或者没有工作的NFS文件系统,或者同样糟糕的需要手动干预的东西).

当脚本没有意识到“旧”进程实际上没有退出并且在旧的进程仍在运行时启动新进程时,出现了一个错误;我们正在通过一个更强大的锁定系统解决这个问题(所以至少新进程如果旧的运行时不会启动),但我发现很难测试整个系统,因为我还没有找到一种方法来模拟困难的过程.

所以,问题是:

即使作为特权用户,如何手动模拟在向其发送SIGKILL时不会退出的进程?

解决方法

如果您的流程在执行I / O时遇到问题,您可以通过以下方式模拟您的情况:

lvcreate -n lvtest -L 2G vgtest
mkfs.ext3 -m0 /dev/vgtest/lvtest
mount /dev/vgtest/lvtest /mnt
dmsetup suspend /dev/vgtest/lvtest && dd if=/dev/zero of=/mnt/file.img bs=1M count=2048 &

通过这种方式,dd进程将等待IO并且将忽略每个信号,我知道在最新的内核中,当进程在nfs文件系统上等待IO时,信号不会被忽略.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读