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

TERM的bash陷阱 – 我做错了什么?

发布时间:2020-12-16 01:33:49 所属栏目:安全 来源:网络整理
导读:鉴于此hack.c程序: #include stdio.hmain(){ int i=0; for(i=0; i100; i++) { printf("%dn",i); sleep(5); }} 和这个hack.sh bash脚本: #!/bin/bash./hack 如果我运行hack.sh,则会创建两个进程 – 一个用于bash,一个用于C任务.如果TERM信号被发送到bash进
鉴于此hack.c程序:
#include <stdio.h>
main()
{
 int i=0;
 for(i=0; i<100; i++) {
   printf("%dn",i);
   sleep(5);
 }
}

和这个hack.sh bash脚本:

#!/bin/bash
./hack

如果我运行hack.sh,则会创建两个进程 – 一个用于bash,一个用于C任务.如果TERM信号被发送到bash进程,则C进程不受伤害.

现在,假设原始bash是使用Runtime.exec()从Java程序启动的,所以我对它的唯一控制是Process.destroy()(它将TERM发送到bash进程)?假设我希望C进程与启动它的bash一起死掉?

我一直在用bash尝试这样的事情:

#!/bin/bash
trap "kill -TERM -$$; exit" TERM
./hack

即捕获TERM信号并将其重新广播到整个进程组的陷阱子句.这对我不起作用 – 其中包含该陷阱子句的bash进程忽略了TERM信号.

我在这里错过了什么?

您可以尝试以下这些方面:
#!/bin/bash
./hack &
pid=$!
trap "kill $pid" TERM
wait $pid

这可能更简单(和等效):

#!/bin/bash
./hack &
trap "kill $!" TERM
wait

陷阱上的双引号应该在定义陷阱时进行单词扩展,因此更改值为$!不应该有影响;但我更喜欢第一个版本.

(编辑:李大同)

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

    推荐文章
      热点阅读