我希望为自定义用户信号阻止进程,当信号到达时,它应该唤醒 shell 脚本中的等待进程?只需要我可以处理的步骤编码吗?
2 回答
如果您要发送的信号是 17 号信号,那么您可以使用:
trap ":" 17
sleep 1000000
trap 17
# ...what you want to happen after the signal is received...
当收到信号时,第一个trap
命令将执行引用的命令 ( )。:
该:
命令什么也不做。但是,您不能使用trap "" 17
这意味着“忽略信号 17”,这与您想要的相反。
这sleep 1000000
是一种在不占用 CPU 资源的情况下长时间不做任何事情的方法。
第二个trap
取消信号 17 的信号处理,恢复默认行为。
之后,您可以在收到信号后放置您想要执行的任何代码。
sleep
您可能更喜欢创建和使用程序,而不是使用pause
,该程序会无限期地等待(而不是冒险在sleep
收到信号之前唤醒)。你可以使用这个简单的程序:
#include <unistd.h>
int main(void)
{
pause();
return(0);
}
作为一个细节点,通常不会执行 return;该信号通常会强制程序在pause()
返回之前终止errno == EINTR
。
不是 100% 清楚你想要做什么,但听起来你基本上想要一个 shell 脚本“键盘记录器”在后台监听并根据事情采取行动。如果我是正确的,我不会问为什么......如果我不是我道歉;-)
如果你想成为硬核,你可以了解文件系统中的 /dev/input/event* 文件以及如何遵循它们。或者,您可以查看本教程以创建键盘记录器和登录: http ://www.slideshare.net/rmorrill/creating-a-keystroke-logger-in-unix-shell-scripting
最后,如果你真的只是想安装然后去,你可以尝试安装这个: http ://www.justhackitnow.com/2012/03/keylogger-for-linux.html