2

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

4

2 回答 2

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);
}

作为一个细节点,通常不会执行 return;该信号通常会强制程序在pause()返回之前终止errno == EINTR

于 2013-07-18T20:57:00.500 回答
0

不是 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

于 2013-07-18T20:44:32.313 回答