2013-07-18 91 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返回之前終止。