Получите PID приложения, работающего в активном эмуляторе терминала

Я нахожусь в той же ситуации, и я выполняю MediaWiki. Аутентификация NTLM обрабатывается в Apache посредством модуля PyAuthenNTLM2 на ультрасовременном Python; MediaWiki входит в систему пользователь (и автоматически создает Wiki, составляют их в первый раз) посредством расширения AutomaticaREMOTE_USER.

Мой опыт довольно хорош: SSO хорошо работает, пользователи не замечают во всем, что Wiki не принадлежит домену Windows, и люди IT рады, что пароли сохранены безопасными.

Отказ от ответственности: Я - автор PyAuthenNTLM2, который я записал, потому что предыдущий плагин Apache я использовал (Apache2:: AuthenNTLM2), не сохраняется и не работает со значением по умолчанию Windows 7 (и разумный) политика безопасности (NTLMv2).

4
05.06.2013, 01:29
2 ответа

Получил его! Благодаря Stephane Chazelas для справки. Прием должен был искать дочерние процессы... D'oh!

Мой сценарий теперь:

#!/usr/bin/env bash
ppid=$(xdotool getactivewindow getwindowpid) # PID of process in the window
pid=$(pgrep -P $ppid | tail -n1) # PID of the last child
cwd="$(readlink /proc/${pid:-$ppid}/cwd)" # current CWD of pid, or ppid if no pid
cd "$cwd"
"$@"

Можно использовать его путем простого добавления префикса любой команды название сценария, например. incwd urxvt.

Единственный протест состоит в том что некоторые программы, как evince, сбросьте их cwd. Я сомневаюсь, что существует что-либо, что я могу сделать в этих случаях.

0
27.01.2020, 21:00
  • 1
    Нет ли другой протест: Если окно имеет несколько, дочерний PID и вызывающая сторона не был новым? терминал гнома и Chrome оба приходят на ум. Как Вы называете этот сценарий, нет ли способ использовать PPID сценария для, по крайней мере, сужают полевые f возможности? –  Bratchley 04.06.2013, 13:42
  • 2
    Мое надлежащее использование было посредством привязки клавиш, таким образом, ее родитель будет WM (OpenBox в моем случае). –  1ace 04.06.2013, 14:38

Возможно:

readlink "/proc/$(
    pgrep -P "$(xdotool getactivewindow getwindowpid)" | head -n1
  )/cwd"

Это, добираются, pid связался с использованием окна xdotool, использовать pgrep получить список детей того процесса, head -n1 только выбрать первый и использование readlink получить рабочий каталог.

Не будет работать на каждое окно. Например, не для окон от удаленных клиентов или которые не предоставляют менеджеру окон их PID, не для процессов другими пользователями.

2
27.01.2020, 21:00
  • 1
    Спасибо за идею получить детей PIDs и более чистый способ получить PID окна. Я отправил полный ответ в другом ответе, хотя, таким образом, я не отмечу Ваш ответ как принятый. –  1ace 04.06.2013, 13:20

Теги

Похожие вопросы