【问题标题】:send signals to process using its pid使用其 pid 向进程发送信号
【发布时间】:2015-05-11 07:01:26
【问题描述】:

见鬼去吧,

我正在尝试编写一个 shell 脚本来运行一个程序并发送一系列信号,它们之间存在延迟。我写了以下代码。

#!/bin/sh

KNOCK="KNOCK"
export KNOCK
./knock &
knockPID=$!

kill -SIGUSR2 $knockPID
kill -SIGUSR2 $knockPID
kill -SIGUSR1 $knockPID
sleep 2s;
kill -SIGUSR1 $knockPID
kill -SIGUSR2 $knockPID

我不断收到每个 kill 命令的以下错误

kill: Illegal option -S

感谢您的帮助。

【问题讨论】:

  • 您使用的是什么操作系统?查看系统的 kill 手册页 - 其中许多支持不同的语法。还有,什么壳? kill 是许多 shell 中的内置函数。
  • kill --signal SIGUSR2 $knockPID 呢?
  • 使用 --signal 将错误更改为非法选项 --
  • 您应该添加您正在使用的外壳,因为/bin/sh 不会链接到每个系统上的同一个外壳。你可以运行ls -l $(which sh)查看链接。

标签: shell signals sh kill pid


【解决方案1】:

通常,kill 命令的命名信号参数是"recognized in a case-independent fashion, without the SIG prefix"。所以,你想要:

kill -USR1 $knockPID

等等。

【讨论】:

  • 这是使用dash 的方法,有时(这很好)/bin/sh 链接到的外壳。
【解决方案2】:
kill -s SIGUSR2 $knockPID

应该适用于所有现代操作系统。

【讨论】:

  • 这不起作用,我现在得到一个不同的错误。 kill:无效的信号编号或名称:SIGUSR2
【解决方案3】:

我也遇到了这个问题,我用不同的 shell 解决了这个问题:

#!/bin/bash

【讨论】:

    猜你喜欢
    • 2016-03-21
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 2021-08-03
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多