0

次の 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
}
4

1 に答える 1