У меня есть следующий сценарий оболочки 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
"[email protected]" >/dev/null 2>&1 &!
unsetopt nobgnice
}
Вероятно, это лучше не делать каких-либо манипуляций с текстом на всех, но использовать модуль CPAN 'Proc :: ProcessTable'. –
Покажите пример ввода и ожидаемый результат для части, которую вы хотите заменить (то есть для вашего желаемого скрипта awk). –