2017-08-16 3 views
0

バイナリを実行する必要があるbashスクリプトを作成しようとしていますが、Ctrl + cキーを押しながらスクリプトを実行すると、バックグラウンドで実行されているバイナリも停止する必要があります。このコードを試していますが、それは役に立ちません。ユーザがbashのctrl + cを押すまで、どのようにプログラムを実行できますか?

#!/bin/bash 

cd /usr/local/path-to-binary 
./testBinary 
read input 

if (("$input" == "Ctrl+c")); then 
ps -aef|grep Binary 
pkill -9 Binary 
+4

http://shellcheck.net/でコードを実行し、見つけたものすべてを修正する習慣をつけることをお勧めします。 –

+1

これは、ここのコードの場合、 'read input'は' testBinary'が自己デーモン化し、それによって検出を回避しようとしない限り実行されません。 –

+1

... '(())'は算術構成です。文字列の比較には意味がありません。途中で中断された後に 'read'が文字列' Ctrl + c 'を返すわけではありません。 –

答えて

3

スクリプトにいくつかのエラーがあります。 comments below your questionを確認してください。ここで

は、バックグラウンド・プロセスを起動し、CCtrlキー + にそれを殺す方法の例です:

#!/bin/bash 

# Register signal handler for SIGINT (Ctrl+c) 
trap abort INT 

function abort() { 
    echo "Sending SIGINT to background process ${pid}" 
    # Kill background process 
    kill "${pid}" 
    # Wait for it to finish after killing it 
    wait "${pid}" 
    # Exit the script 
    echo "Aborting" 
    exit 1 
} 

# Start long running process in background (&) 
sleep 1000 & 
# Obtain the pid of that process 
pid=$! 
# Wait for the background process to finish 
wait 

PS:ただのスクリプトを実行し、CCtrlキー + を押してください。 readは必須ではありません。

関連する問題