2015-10-04 66 views
1

我需要知道進程是否來自用戶。 我使用這個代碼:如何知道進程是bash中的用戶還是root用戶

#c is the PID 
Aid=$(cat /proc/$c/status | grep -e ^Uid) 
Uid="Uid: 0 0 0 0" 
if [ "$Aid" != "$Uid" ]; then 
    echo "is from user" 
fi 

但我不是很舒服的字符串中的「標籤」,我認爲,也許可能會導致一些意外行爲。

有沒有其他方法可以做到這一點?

+0

等待我想我誤解了這個問題。你想獲得某個PID的UID,而不是你的腳本? –

+0

是的,來自任意進程。 – exsnake

+0

你可以在'/ proc/'上使用'stat'系統調用嗎?但是製表符分隔的字符串是合理匹配的,因爲如果它在'/ proc'中,你不會被用戶輸入絆倒。 – Sobrique

回答

5

你可以得到一定的PID的UID不使用ps -o uid= -p $pidhere解析:

mypid=1 
if uid=$(ps -o uid= -p "$mypid") 
then 
    if [[ $uid -eq 0 ]] 
    then 
    echo "The process runs as root" 
    else 
    echo "The process runs as something else" 
    fi 
else 
    echo "The process doesn't exist" 
fi 
+0

這聽起來像OP想檢查是否有一些任意進程(我的假設是基於使用變量'$ c'而不是'self')。 –

+0

是的,我想檢查一些任意進程是用戶還是root – exsnake

+0

雖然類似的原理適用 - 實際的uid與功能相比並不重要。 (或者至少不應該 - 大多數人都懶得有'root'和'其他人')。 – Sobrique

相關問題