You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从bash脚本向目标进程发送携带int类型数据的信号

Bash脚本发送携带整型负载信号的实现方案

Linux系统仅支持实时信号(SIGRTMIN ~ SIGRTMAX范围)通过sigqueue系统调用携带附加整型数据,Bash本身没有内置对应能力,可通过默认预装的脚本语言调用系统调用实现,无需编译C程序,也无需使用管道:


方案1:Perl实现(兼容性最优,绝大多数发行版默认预装Perl)

直接调用POSIX标准的sigqueue接口,和C程序的实现逻辑完全一致:

#!/bin/bash
# 配置参数
TARGET_PID=你的目标进程PID
# 示例使用SIGRTMIN+2作为发送信号,可自行调整
SIGNAL=$(perl -e 'use POSIX; print SIGRTMIN+2')
# 要携带的int类型数据
PAYLOAD_INT=1024

# 执行信号发送
perl -e '
use POSIX qw(sigqueue);
sigqueue($ARGV[0], int($ARGV[1]), int($ARGV[2])) or die "发送失败: $!"
' $TARGET_PID $SIGNAL $PAYLOAD_INT

方案2:Python实现(适合预装Python3.3+的环境)

使用os.kill的扩展参数实现信号发送:

#!/bin/bash
# 配置参数
TARGET_PID=你的目标进程PID
SIGNAL=$(python3 -c 'import signal; print(signal.SIGRTMIN+2)')
PAYLOAD_INT=1024

# 执行信号发送
python3 -c "
import os, signal
os.kill($TARGET_PID, $SIGNAL, $PAYLOAD_INT)
"

注意事项

  • 只有实时信号支持携带自定义负载,常规标准信号(如SIGUSR1、SIGTERM)的附加负载会被内核忽略,无法被接收方获取。
  • 目标进程必须注册带SA_SIGINFO标志的信号处理函数,才能正确读取到你发送的整型数据,和你现有C语言的接收逻辑完全兼容。

内容的提问来源于stack exchange,提问作者Ventus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:24:08