2013-07-18 55 views
2

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

+1

你需要的命令是'trap'。这是一个shell内置命令。搜索“shell陷阱信号”以查找大量教程。 –

回答

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

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返回之前终止。