2012-02-23 31 views
2

私はbashシェルを学ぶという本でbashを学んでいました。私がkillコマンドに出くわすまで、すべてがうまくいった。 loopという小さなスクリプトを作成し、loop &を使って実行しました。 kill %loopを使用した場合、ps -e | grep loopを使用しても、プロセスはまだ存在します。私はそれを殺すことができなかったのですか? kill -9を使用する必要がありますか?またpidofpidof loopを使用してもまったく動作していないようです。それは何も返さない。Bash pidは何も返さない

私はUbuntuとbashを使用しています。スクリプトは重要ではないはずですが、ここではそうです:

#! /bin/bash 
# Just a script 
while true; do 
    sleep 60 
done 

答えて

2

シェルスクリプトはスクリプトの名前として実行されません。それらはシバンで指定したシェルの名前として実行されます。あなたの場合、それは/bin/bashです。 pidof bashを実行した場合は、スクリプトのpidを取得しているはずです(その時に実行されている他のすべてのbashスクリプトと一緒に)。

言われているように、あなたはkill %loopで試しているように、スクリプトを名前で殺すことはできません。キルはpidだけを受け入れます。 %表記を使用している場合は、シェルによって割り当てられた内部ジョブ番号を参照します。たとえば、ループスクリプトを例として使用してください:

$ ./loop & <-- first run of loop script 
[1] 8077 <--- job #1, running as pid 8077 
$ ./loop & <--- second run of loop script 
[2] 8079 <-- job #2, running as pid 8079 
$ jobs 
[1]- Running     ./loop & 
[2]+ Running     ./loop & 
$ kill %2 
$ jobs 
[1]- Running     ./loop & 
[2]+ Terminated    ./loop <-- note, showing 'terminated' now 
$ kill -9 8077 
$ jobs 
[1]+ Killed     ./loop 
$ jobs 
$ 
+0

'pidof -x loop'を実行して、プロセスのpidをスクリプト名で取得することもできます。 –

+1

bash組み込みの 'kill'は、あいまいでない限り、絶対にジョブ名を受け入れます。 –

+0

は、私が使用しているbashにはありません: 'kill%loop' - >' bash:kill:GNU bashバージョン3.00.15(1)-release(i386-redhat- linux-gnu) ' –

関連する問題