Не уверен, что в общем виде, без поиска родителей, можно отделить два одинаковых процесса, запущенных юзером и sudo на этого юзера. Ну наверное можно еще, если от запуска плясать, скриптом, в котором запускается шелл, подается его пид куда-то в файл, а потом, в нем же, екзеком запускается нужная программка. Но это все-равно как-то уже танцы. А в чем проблема сама, что на одной машине $! выдает нужный пид, а на дргой тот же $! выдает пид отдельного процеса "sudo"? Может тогда нужный пид среди деток искать?Вий писал(а): А если там несколько процессов с одинаковым именем?
И в sh-скрипте есть место шутке
-
Ravinger
Re: И в sh-скрипте есть место шутке
Re: И в sh-скрипте есть место шутке
Зависит от необходимой степени кошерности. Один (непроверенный) вариант:Вий писал(а): Как кошерным образом получить PID процесса, запущенного под sudo?
Код: Выделить всё
$ cat >my_cool_dd_starter.sh
$ dd if=/dev/zero of=/dev/null bs=16K & echo $!
$ chmod +x my_cool_dd_starter.sh
$ sudo my_cool_dd_starter.sh
А практически, ты здесь получаешь pid родителя. Поскольку в твоём примере у родителя только один потомок, вполне можно его спросить у ps:Вий писал(а):
Теоретически, должен работать следующий код:
Код: Выделить всё
sudo dd if=/dev/zero of=/dev/null bs=16K & dd_pid=$! ; echo pid = ${dd_pid}
Код: Выделить всё
# sudo sleep 10&echo $!
[1] 32698
32698
# ps --ppid 32698
PID TTY TIME CMD
32699 pts/8 00:00:00 sleep
#
- Вий
- Сообщения: 6237
- Зарегистрирован: 22.09.2011 13:00
- Ник с it-ru.de: верифицирован
- Где: Минск
- Род занятий: Программист ;)
- Интересы: разные...
Re: И в sh-скрипте есть место шутке
Да, именно так.Ravinger писал(а):А в чем проблема сама, что на одной машине $! выдает нужный пид, а на дргой тот же $! выдает пид отдельного процеса "sudo"? Может тогда нужный пид среди деток искать?
Попробуем вашу с atar'ом - будем искать и среди "родственников" sudo.
Вий есть колоссальное создание простонародного воображения...
"...Когда хотят сделать людей добрыми, мудрыми, свободными, воздержанными, великодушными, то неизбежно приходят к желанию их всех перебить." Анатоль Франс
"...Когда хотят сделать людей добрыми, мудрыми, свободными, воздержанными, великодушными, то неизбежно приходят к желанию их всех перебить." Анатоль Франс
-
Ravinger
Re: И в sh-скрипте есть место шутке
Елки-палки. Понял кажется.atar писал(а): Таблица истинности неправильная.
if [ $? -ne 0 ]; then
STATUS=1
Re: И в sh-скрипте есть место шутке
Ага.Ravinger писал(а):Елки-палки. Понял кажется.atar писал(а): Таблица истинности неправильная.Когда считал таблицу, то, похоже, подсознательно поставил в голове:
if [ $? -ne 0 ]; then
STATUS=1
Код: Выделить всё
STATUS2=$?
if [ STATUS2 -ne 0 ]; then STATUS=STATUS2
-
Ravinger
Re: И в sh-скрипте есть место шутке
Знакомо, наступал уже на такие грабли.atar писал(а): Ага.. Правда, терятся инфа, что именно пошло на перекосяк.
Re: И в sh-скрипте есть место шутке
И ни гвори кума.Вован Водкин писал(а):прохвессеаналы май ассКод: Выделить всё
local stat=0 myprog1 || stat=$? myprog2 || stat=$? return $stat
line 1: local: can only be used in a function
А так, да. Если статус больше ни для чего не нужен, "||" короче.
Re: И в sh-скрипте есть место шутке
Вован Водкин писал(а):$(exit $stat) конечноВован Водкин писал(а): то я бы напейсал $(exit $?) вместо return $stat
- нахрена функция?
- нахрена скобки?
Re: И в sh-скрипте есть место шутке
Где я напейсал ритурн?Вован Водкин писал(а):-как только ты напейсал ретурн, я понял что это функцияatar писал(а):
- нахрена функция?
- нахрена скобки?
Лиспист детектед.Вован Водкин писал(а): -со скобками красивше ога