我想要为自定义用户信号阻止进程,当信号到达时,它应该唤醒shell脚本中的等待进程?只需要编码我可以处理的步骤吗?
答案 0 :(得分:1)
如果您要发送的信号是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);
}
作为一个细节点,通常不会执行返回;信号通常会强制程序在pause()
返回errno == EINTR
之前终止。
答案 1 :(得分:0)
这并不是100%清楚你想要做什么,但听起来你基本上想要一个shell-scrip“键盘记录器”在后台听,并根据事情采取行动。如果我是对的,我不会问为什么......如果我不是我道歉; - )
如果你想要硬核,你可以了解文件系统中的/ 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