輸入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
的位掩碼是十六進制數字。如果位號N
置位,則位掩碼包含編號爲N
的信號(假設位編號從1開始)。
因此,具有信號數signum
和一個位掩碼m
我們可以發現在所述位掩碼中是否存在用下列公式(僞碼)信號:
exists = mask & (1 << signum - 1)
我們移位1
(爲0x1)向左邊signum - 1
位,然後在mask
上應用按位AND
操作。如果設置了signum
的位,則結果爲非零。
我寫了一個Bash腳本,它打印PID的掛起,阻塞,忽略和捕獲信號的數量。
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
用法:
./pidsig.sh $pid
其中$pid
是進程號。不要忘記讓它可執行:chmod +x pidsig.sh
。
輸出將類似於以下
======== SigPnd: (0000000000000000) ===========
======== SigBlk: (0000000000000000) ===========
======== SigIgn: (0000000001001000) ===========
SIGXFSZ 16777216
SIGPIPE 4096
======== SigCgt: (0000000180010002) ===========
SIGCHLD 65536
SIGINT 2
相關問題
- 1. JOptionPane.showMessageDialog()顯示但沒有任何消息?
- 2. Console.WriteLine沒有顯示消息
- 3. 消息框沒有顯示
- 4. django消息沒有顯示
- 5. AddModelError消息沒有顯示
- 6. 有沒有辦法顯示任何Dr.Retet Exception的信息消息?
- 7. 顯示任務ALT + TAB,但沒有顯示在任務欄
- 8. 在Windows Phone中顯示沒有任何按鈕的消息
- 9. Xcode- Chartboost SDK沒有在日誌中顯示任何消息
- 10. MySQL沒有顯示任何錯誤消息
- 11. 如何顯示C#中沒有任何按鈕的消息框
- 12. 在bash,有沒有死「錯誤消息」
- 13. log4j消息日誌中沒有顯示
- 14. CakePHP 2.6 flash消息沒有顯示
- 15. nested_messages沒有顯示以前的消息
- 16. Django 1.6 - 消息沒有顯示
- 17. asp.net JavaScript消息沒有顯示出來
- 18. 顯示消息時沒有行發現
- 19. 沒有正確顯示消息
- 20. 消息框顯示沒有空格嗎?
- 21. 豆:消息沒有顯示出來
- 22. Catlina.out沒有顯示記錄的消息
- 23. CakePHP沒有顯示flash()消息?
- 24. Django 1.6消息沒有顯示
- 25. 模擬器沒有顯示消息框
- 26. Django的消息框架沒有顯示消息模板
- 27. ng消息沒有正確顯示消息
- 28. 在onMessageReceived中沒有顯示ToMessageReceived的FireBase Colud消息服務
- 29. 耙RSpec任務沒有顯示
- 30. Wix:顯示有條件的消息框沒有取消
你運行它們作爲當前shell的工作? –
不好意思,但是這個Q不是關於爲StackOverflow定義的編程。它可能**更適合於相關網站,http://askubuntu.com或http://unix.stackexchange.com(Unix和Linux)。考慮使用Q底部的標誌鏈接並請主持人移動它。請不要在2個不同的網站上發佈相同的Q.謝謝你,祝你好運。 – shellter
http://unix.stackexchange.com/questions ...不是編程問題,還是我錯過了那部分?要(可能?)回答你的問題:如果你正在殺的工作是背景,並且在相同的bash實例下運行,bash只會給你反饋。 – tink