shell脚本中的信号处理

时间:2013-07-18 10:06:58

标签: shell operating-system signals

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

2 个答案:

答案 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