LINUX.ORG.RU
решено ФорумAdmin

pid процесса

 ,


0

1

Приветствую Вас форумчане. Прошу помощи. Не пинайте. С линухом пока знаком не очень хорошо. Итак. При запуске ОС (ubuntu 16.04) нужно считать pid определенного процесса. Как только pid процесса изменится выполнить команду poweroff. Собственно вся задача. Можно попробовать цыклом в скрипте. Но мне кажется есть способ элегантнее. Заранее благодарю всех кто откликнется!


Сначала узнаёшь pid нужного процесса. Потом запускаешь:

strace -e shutdown -p $pid 2>/dev/null; poweroff
i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Прошу прощения за тупняк. Это в скрипте должно работать? Типа:

pid=«pidof xfreerdp»

strace -e shutdown -p $pid 2>/dev/null; poweroff

rostma
() автор топика

Как только pid процесса изменится выполнить команду poweroff.

pid процесса не может измениться.

urxvt ★★★★★
()
Ответ на: комментарий от i-rinat

это наверняка не то, что ты хотел. Но это то, что ты просил

Золотые цитаты лора

zolden ★★★★★
()
Ответ на: комментарий от i-rinat

Спасибо за помощь! Но, предложенная команда выключает комп. Независимо от того в скрипте ее запускать или самостоятельно. PID при этом не меняется. Может в ней ошибка?

rostma
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

Пид не меняется и не может тебе надо остеживать отсутствие процесса ибо смена пида это перезапуск процесса

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

В моем случае отслеживать нужно как раз перезапуск процесса. Имя процесса то будит одинаковым. А вот pid после перезапуска меняется. Я умнее ничего не придумал кроме как сравнивать pid при запуске и если он изменился считать процесс перезапущеным. И выполнять команду poweroff. Вообще нужно при перезапуске процесса xfreerdp выполнять poweroff. Может я зря вцепился в отслеживание pid?

rostma
() автор топика
Ответ на: комментарий от rostma

Либо у тебя нет strace установленного, либо у твоего пользователя не хватает прав, чтобы подцепиться к процессу.

i-rinat ★★★★★
()
Ответ на: комментарий от rostma

Смена пида == перезапуск процесса. Тебе достаточно просто узнать что процесс умер и можно вырубать. Если надо именно сохранить пид, потом в цикле получать текущий и сравнивать с первоначальным то делай сам ибо тогда скорее всего это задачка от препода :D

  • ты уже знаешь как делать цикл
  • ты уже знаешь как получить сохранить пид
  • ты уже знаешь как сравнить пиды

Осталось потратить минут 5-10-15 на раздумья как это всё склеить. =) Удачи.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от rostma

Вообще нужно при перезапуске процесса xfreerdp выполнять poweroff.

Если xfreerdp не демонизируется, то достаточно вместо него положить скрипт, который будет запускать настоящий бинарник xfreerdp, а потом poweroff. Тогда как только xfreerdp завершится, будет выполнена следующая команда в скрипте, то есть poweroff. Если демонизируется, нужно смотреть в сторону системы управления сервисами. Возможно, там есть параметры, куда можно вписать команды на случай завершения процесса.

i-rinat ★★★★★
()

То, что ты хочешь сделать, можно реализовать скриптом, так как:
PID процесса не изменяется. Процесс может порождать дочерний, может завершиться, может быть создан процесс с таким же именем и другим PID'ом.

IPR ★★★★★
()
Ответ на: комментарий от rostma

Всем спасибо за помощь. Получилось так как посоветовали в первом ответе через скрипт.

pid=`pidof xfreerdp`
strace -e shutdown -p $pid 2>/dev/null; poweroff

И да, не работало из за отсутствия пакета strace в системе. Еще раз огромное спасибо!

rostma
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.