次の Z シェル スクリプトを使用して、プログラムのインスタンスがまだアクティブに実行されていない場合 (ゾンビ インスタンスが存在する場合でも) を起動したり、停止したインスタンスを再開したりします。おそらくperlを使用して、これを行うより良い方法があるに違いないと思います。シェル スクリプトはあまりにもぎこちないように思えます。少なくとも、perl や awk などの別の言語からテキスト操作を実行できるはずです。
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
"$@" >/dev/null 2>&1 &!
unsetopt nobgnice
}