shell脚本中的信号处理

shell脚本中的信号处理,shell,operating-system,signals,Shell,Operating System,Signals,我希望自定义用户信号的进程被阻止,当信号到达时,它应该在shell脚本中唤醒等待进程?只需要步骤编码我就可以处理了?你想做什么还不是100%清楚,但听起来你基本上想要一个shell脚本“键盘记录器”在背景中倾听,并根据实际情况采取行动。如果我是对的,我不会问为什么。。。如果我不是,我道歉;-) 如果您想成为硬核,您可以了解文件系统中的/dev/input/event*文件以及如何遵循这些文件。或者,您可以查看本教程,了解如何创建键盘记录器和日志: 最后,如果您真的只想安装并继续,您可以尝试安装

我希望自定义用户信号的进程被阻止,当信号到达时,它应该在shell脚本中唤醒等待进程?只需要步骤编码我就可以处理了?

你想做什么还不是100%清楚,但听起来你基本上想要一个shell脚本“键盘记录器”在背景中倾听,并根据实际情况采取行动。如果我是对的,我不会问为什么。。。如果我不是,我道歉;-)

如果您想成为硬核,您可以了解文件系统中的/dev/input/event*文件以及如何遵循这些文件。或者,您可以查看本教程,了解如何创建键盘记录器和日志:

最后,如果您真的只想安装并继续,您可以尝试安装:

如果您希望发送的信号是17号信号,则可以使用:

trap ":" 17
sleep 1000000
trap 17
# ...what you want to happen after the signal is received...
当接收到信号时,第一个
trap
命令将执行带引号的命令(
)。
命令不执行任何操作。但是,您不能使用
trap“17
,因为这意味着“忽略信号17”,这与您想要的正好相反

sleep 1000000
是一种在不耗尽CPU资源的情况下长时间无所事事的方法

第二个
陷阱
取消信号17的信号处理,恢复默认行为

在这之后,您可以在接收到信号后执行任何代码


与其使用
睡眠
,不如创建并使用一个程序,
暂停
,它会无限期地等待(而不是冒着
睡眠
在收到信号之前醒来的风险)。您可以使用这个简单的程序:

#include <unistd.h>

int main(void)
{
    pause();
    return(0);
}
#包括
内部主(空)
{
暂停();
返回(0);
}

作为一个细节,通常不会执行返回;该信号通常会迫使程序在
pause()
返回
errno==EINTR

之前终止。您需要的命令是
trap
。这是一个shell内置命令。搜索“贝壳陷阱信号”可以找到很多教程。