プロセスを終了するか停止するためにkillを入力した後で、ジョブメッセージが表示されません。だから私は私の命令が受け入れられるかどうかわからない。なぜ私のbashはコマンドを殺した後にメッセージを表示しないのですか? 私はVirtualBox内でUbuntu 12を使用しています。linux bashがジョブメッセージを表示しない
-1
A
答えて
1
kill
を発行している場合は、プロセスID(PID)がわかります。 PIDを持つことで、プロセスがまだ存在する場合、そのプロセスに関する多くの情報を取得できます。
たとえば、次のコマンドは、ブロックされたキャッチ、無視され、保留中の信号のためのビットマスクを表示します:
pid=1189
ps -p $pid -o blocked,caught,ignored,pending,s,args
詳細はman ps
を参照してください。出力は次のようになります。
BLOCKED CAUGHT IGNORED PENDING S COMMAND
0000000000000000 0000000180010002 0000000001001000 0000000000000000 S /usr/bin/python2.7 /usr/lib/py
プロセスが存在しない場合、コマンドは失敗します。何も出力しない場合、コマンドが失敗したかどうかをどのように知っているかを尋ねます。ここでは、前のコマンドの終了ステータスを含む$?
変数の値を確認できます。ゼロでない場合、前のコマンドは失敗しました。例:
[ $? -eq 0 ] && echo 'success'
別の方法は、/proc/$pid/status
を解析することである。
grep -i sig /proc/$pid/status
SigQ: 0/15042
SigPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000001001000
SigCgt: 0000000180010002
ビットマスクは16進数です。ビット番号N
が設定されている場合、ビットマスクには番号N
の信号が含まれます(ビット番号は1から始まるものとします)。
したがって、信号数signum
、我々は、信号は、次式(擬似コード)とビットマスクに存在するかどうかを調べることができるビットマスクm
有する:
exists = mask & (1 << signum - 1)
を我々は1
(0x1の)をシフトsignum - 1
ビットで左に移動し、ビット単位でAND
の操作をmask
に適用します。 signum
のビットが設定されている場合、結果はゼロ以外です。
PIDの保留中、ブロック中、無視中、および捕捉済みのシグナルの数を出力するBashスクリプトを作成しました。
pidsig.sh
#!/bin/bash -
declare -i pid
declare -A sigmap
pid=$1
# Construct an array from the list of signal names and numbers
a=(`kill -l | sed -r 's~[)\t ]+~ ~g'`)
# Build signal name-to-number map
i=0
while [ $i -lt ${#a[@]} ]
do
v=${a[$i]}
((++i))
k=${a[$i]}
sigmap[$k]=$v
((++i))
done
# Fetch signal info from /proc/$pid/status,
# then print how many times the process caught each type of signal.
grep -P '^Sig\w{3}' /proc/$pid/status | while read -r -a line
do
title="${line[0]}"
mask=${line[1]}
echo "======== $title ($mask) ==========="
for k in "${!sigmap[@]}"
do
signum=${sigmap[$k]}
#echo "k: $k v: $signum"
# convert mask to decimal number, save into $m
let "m = 0x$mask"
# shift 1 to the left by `signum - 1` bits
num_caught=$(($m & (1 << signum - 1)))
# ignore zeroes
[ $num_caught -eq 0 ] || printf "%-14s%s\n" $k $num_caught
done
done
使用法:$pid
プロセス番号
./pidsig.sh $pid
。実行可能にすることを忘れないでください:chmod +x pidsig.sh
。
出力は次
======== SigPnd: (0000000000000000) ===========
======== SigBlk: (0000000000000000) ===========
======== SigIgn: (0000000001001000) ===========
SIGXFSZ 16777216
SIGPIPE 4096
======== SigCgt: (0000000180010002) ===========
SIGCHLD 65536
SIGINT 2
関連する問題
- 1. Linuxコマンドがbashで動作しない
- 2. PysideがLinuxのヒントと特定のイベントを表示しない
- 3. EC2 LinuxインスタンスPHPInfoがmysqlを表示しない
- 4. git-bash-promptがGIT 2.11.0で正しく表示されない
- 5. bashでprintfが正しく表示されない
- 6. Unix/Linux Bashスクリプティング:sedがスペースを尊重しない
- 7. linux mint 18 - pygletが正しく表示されない(python3)
- 8. Linux bash if - elifが期待どおりに動作しない
- 9. シェルスクリプトのループがLinuxのbashシェルで動作しないwhile
- 10. ncursesがbashのcursurを表示しないようにしました
- 11. システム履歴Linux 5.11(BASHではない)
- 12. 関数から改行を表示しないbash?
- 13. 変数がBashに表示されないのはなぜですか?
- 14. Dockerfileエントリポイントbashファイル.envがコンテナに表示されない
- 15. 実行しないでlinuxに画像を表示x
- 16. LinuxでJQ解析エラーメッセージを表示しない
- 17. TkinterがLinux上でUnicode文字を正しく表示しない
- 18. 起動オプションでLinux mintが表示されない
- 19. LinuxマシンでAEMログイン画面が表示されないAEM6.3
- 20. Linuxパッケージ - GNOME 3にプログラムアイコンが表示されない
- 21. LinuxでMemcachedがphpinfoに表示されない
- 22. BIRTレポートでLinux上にUnicode文字が表示されない
- 23. QtアイコンがLinuxに表示されない
- 24. Linuxのbashシェルスクリプトソートライン
- 25. apacheの設定がec2のLinuxインスタンスでwordpressのフロントページを表示しない
- 26. Matplotlibが画像を表示しない
- 27. Bash関数の一部がLinux上で実行されない
- 28. linuxウェインランド表示マルチユーザ
- 29. Bashログインのプロンプトが表示されなくなった
- 30. linux bashエイリアスのエラー通知を非表示にする方法は?
のようになります。あなたは、現在のシェルのジョブとしてそれらを実行していますか? –
申し訳ありませんが、このQはStackOverflowで定義されているプログラミングに関するものではありません。 **関連サイト、http://askubuntu.com、http://unix.stackexchange.com(Unix&Linux)の方が適切かもしれません。 Qの下部にあるフラグリンクを使用してモデレータに移動を依頼してください。 2つの異なるサイトに同じQを投稿しないでください。ありがとう、幸運。 – shellter
http://unix.stackexchange.com/questions ...プログラミングに関する質問ではありませんか?あなたの質問に答えるには(おそらく?):あなたが殺した仕事がバックグラウンドで、bashの同じインスタンスの下で実行されている場合にのみ、bashはフィードバックを返します。 – tink