如何在bash中使用杀死SIGUSR2?

Mar*_*ark 10 linux shell kill

我用iptraf来监控linux中的网络流量,shell命令是(make iptraf在后台运行):

iptraf -s eth0 -f -B -L ./traffic.dat
Run Code Online (Sandbox Code Playgroud)

如果我想得到结果,我必须先停止iptraf,所以我使用shell命令:

kill -SIGUSR2 $pid
Run Code Online (Sandbox Code Playgroud)

但是,如果我将这些shell命令移动到bash脚本文件(net.sh)中,我无法阻止iptraf,并且我收到错误:

kill: SIGUSR2: invalid signal specification
Run Code Online (Sandbox Code Playgroud)

我在脚本文件(net.sh)中使用'kill -l',我发现没有参数名称是SIGUSR2.如果我使用USR2或-9,我什么也得不到.

完整的脚本文件是:

    iptraf -s eth0 -f -B -L ./temp.txt
    pid=`ps -ef | grep iptraf | grep -v grep | awk '{print $2}'`
    kill -USR2 $pid
    cat temp.txt
Run Code Online (Sandbox Code Playgroud)

这些命令后我什么都没得到.

如果我想得到结果,我该怎么办?

hek*_*mgl 15

SIGUSR2是建筑依赖的,可以有一个价值31,1217.这在中描述man 7 signal.您必须找出适合您系统的值.通常这是通过查看:

/usr/include/asm/signal.h 
Run Code Online (Sandbox Code Playgroud)

在我的系统上 - Ubuntu 12.04 AMD 64 - 它的值为12:

#define SIGUSR2     12
Run Code Online (Sandbox Code Playgroud)

一旦知道系统上正确的数值,SIGUSR2就可以使用以下方法发送此信号:

kill -SIGNO PID
# In this case
kill -12 PID
Run Code Online (Sandbox Code Playgroud)


Cla*_*dio 9

在我的Linux机器上它可以工作.

我跑了一个无限循环(pid = 4574),然后我跑了

#!/bin/bash
kill -l | grep USR2
kill -SIGUSR2 4574
Run Code Online (Sandbox Code Playgroud)

kill -l已显示信号且kill -SIGUSR2已发送信号(终止进程).

检查您是否正在运行Bash或其他shell(例如,破折号,繁忙框等)


Avi*_*ran 6

执行此操作的跨平台方式:-s不带SIG前缀使用。例如,:

kill -s USR2 $pid

这似乎适用于 MacOS 和 Linux。

  • 我的 Yocto 构建,本质上是 BusyBox,也使用 POSIX 格式 (2认同)