0
我有以下的Z shell腳本來啓動一個程序的實例,如果一個程序還沒有被主動運行,即使有殭屍實例,或者恢復一個停止的實例。我覺得必須有更好的方式來使用,也許使用perl。 shell腳本看起來太尷尬 - 至少應該可以從另一種語言(如perl或awk)進行文本操作。我該如何替換這個shell腳本?
launchprogram(){
if [ $# = 0 ]
then
cat <<\EOF
launchprogram requires at least one argument.
Usage: launchprogram <program> <optional arguments>
EOF
return 1
fi
mystatus=Z # assume we have a zombie process
process="$(pgrep "$1" | tr \\n ,)"
echo "$process"
process="${process%,}"
if [ "$process" != '' ]
then
process="$(ps -o 'pid s cmd' -p "$process" | sed '1 d')"
fi
oldifs="$IFS"
IFS="$(printf \nX)"
IFS="${IFS%X}"
for i in $process
do
mystatus="${process[2]}"
case $mystatus in
(T)
if ! kill -CONT "${i[1]}"
then
IFS="$oldifs"
return $?
fi
;;
(Z)
;;
(*)
IFS="$oldifs"
return $?
;;
esac
done
IFS="$oldifs"
setopt nobgnice
"[email protected]" >/dev/null 2>&1 &!
unsetopt nobgnice
}
也許這是更好地做任何文本操作可言,但使用CPAN模塊'PROC :: ProcessTable'。 –
顯示要替換的部分的一些示例輸入和預期輸出(即,用於所需的awk腳本)。 –