Страница 3 из 3

Re: И в sh-скрипте есть место шутке

Добавлено: 10.10.2011 11:23
Ravinger
Вий писал(а): А если там несколько процессов с одинаковым именем?
Не уверен, что в общем виде, без поиска родителей, можно отделить два одинаковых процесса, запущенных юзером и sudo на этого юзера. Ну наверное можно еще, если от запуска плясать, скриптом, в котором запускается шелл, подается его пид куда-то в файл, а потом, в нем же, екзеком запускается нужная программка. Но это все-равно как-то уже танцы. А в чем проблема сама, что на одной машине $! выдает нужный пид, а на дргой тот же $! выдает пид отдельного процеса "sudo"? Может тогда нужный пид среди деток искать?

Re: И в sh-скрипте есть место шутке

Добавлено: 10.10.2011 11:27
atar
Вий писал(а): Как кошерным образом получить 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
Вий писал(а):
Теоретически, должен работать следующий код:

Код: Выделить всё

sudo dd if=/dev/zero of=/dev/null bs=16K & dd_pid=$! ; echo pid = ${dd_pid}
А практически, ты здесь получаешь pid родителя. Поскольку в твоём примере у родителя только один потомок, вполне можно его спросить у ps:

Код: Выделить всё

#    sudo sleep 10&echo $!
[1] 32698
32698
#  ps --ppid 32698
  PID TTY          TIME CMD
32699 pts/8    00:00:00 sleep
#

Re: И в sh-скрипте есть место шутке

Добавлено: 10.10.2011 11:32
Вий
Ravinger писал(а):А в чем проблема сама, что на одной машине $! выдает нужный пид, а на дргой тот же $! выдает пид отдельного процеса "sudo"? Может тогда нужный пид среди деток искать?
Да, именно так.

Попробуем вашу с atar'ом - будем искать и среди "родственников" sudo.

Re: И в sh-скрипте есть место шутке

Добавлено: 10.10.2011 11:33
Ravinger
atar писал(а): Таблица истинности неправильная.
Елки-палки. Понял кажется. :) Когда считал таблицу, то, похоже, подсознательно поставил в голове:
if [ $? -ne 0 ]; then
STATUS=1

:D

Re: И в sh-скрипте есть место шутке

Добавлено: 10.10.2011 11:53
atar
Ravinger писал(а):
atar писал(а): Таблица истинности неправильная.
Елки-палки. Понял кажется. :) Когда считал таблицу, то, похоже, подсознательно поставил в голове:
if [ $? -ne 0 ]; then
STATUS=1

:D
Ага. :D . Правда, терятся инфа, что именно пошло на перекосяк. Я сделал

Код: Выделить всё

STATUS2=$?
if [ STATUS2  -ne 0 ]; then STATUS=STATUS2

Re: И в sh-скрипте есть место шутке

Добавлено: 10.10.2011 12:05
Ravinger
atar писал(а): Ага. :D . Правда, терятся инфа, что именно пошло на перекосяк.
Знакомо, наступал уже на такие грабли. :) С тех пор всегда снимаю код в переменную, а потом работаю только с нею. :)

Re: И в sh-скрипте есть место шутке

Добавлено: 10.10.2011 16:30
atar
Вован Водкин писал(а):прохвессеаналы май асс

Код: Выделить всё

local stat=0
myprog1 || stat=$?
myprog2 || stat=$?
return $stat
И ни гвори кума.
line 1: local: can only be used in a function
А так, да. Если статус больше ни для чего не нужен, "||" короче.

Re: И в sh-скрипте есть место шутке

Добавлено: 11.10.2011 10:05
atar
Вован Водкин писал(а):
Вован Водкин писал(а): то я бы напейсал $(exit $?) вместо return $stat
$(exit $stat) конечно
  • нахрена функция?
  • нахрена скобки?

Re: И в sh-скрипте есть место шутке

Добавлено: 11.10.2011 10:34
atar
Вован Водкин писал(а):
atar писал(а):
  • нахрена функция?
  • нахрена скобки?
-как только ты напейсал ретурн, я понял что это функция
Где я напейсал ритурн?
Вован Водкин писал(а): -со скобками красивше ога
Лиспист детектед.