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