Можно ли использовать стандартные инструменты для получения полного имени процесса, когда его имя имеет встроенные пространства?

У меня была та же проблема с Xubuntu 12.10, установка pulseaudio-module-bluetooth заставила его работать.

6
задан 15 January 2011 в 21:08

22 ответа

Все утилиты в любом случае получают информацию из /proc/$PID, но есть (по крайней мере) три места в /proc/$PID, которые содержат имя исполняемого файла в той или иной форме, и сообщают о другой информации.

[d1 ] Поле Name в /proc/$PID/status (также доступно в более сложной форме в /proc/$PID/stat). Это имя исполняемого файла, но усечено до 15 символов. Поскольку ядро ​​выполняет усечение, никакая опция ps не может помочь. Вот что показывает ps -o comm (или его синоним ps -o ucmd). Символьная ссылка /proc/$PID/exename указывает на исполняемый файл. Вы можете получить его содержимое с помощью readlink /proc/$PID/exename. В отличие от информации, сообщенной ps, только пользователь, выполняющий этот процесс, имеет разрешение на чтение цели ссылки. Нулевой аргумент для процесса, выбранный оболочкой или другой программой, которая его вызывала. По соглашению, оболочки выбирают имя исполняемого файла, когда вы его ввели (с полным или без полного пути). Вы можете получить все аргументы из ps с помощью ps -o cmd (или его синонима ps -o command), но аргументы разделены пробелами, поэтому вы не можете достоверно указать, где останавливается нулевой аргумент. Вы можете прочитать аргументы из /proc/cmdline, где они разделены нулевым символом: </proc/$PID/cmdline awk -vRS='\0' '{print; exit;}' извлекает нулевой аргумент.

Для полноты позвольте мне упомянуть, что эти имена могут меняться в течение всего жизненного цикла процесса, хотя большинство программ этого не делают:

Поле Name в /proc/$PID/status (также доступно в более сложной форме в /proc/$PID/stat). Это имя исполняемого файла, но усечено до 15 символов. Поскольку ядро ​​выполняет усечение, никакая опция ps не может помочь. Вот что показывает ps -o comm (или его синоним ps -o ucmd). Исполняемый файл можно переименовать или удалить. В простых случаях Linux отслеживает новое имя (но крайние случаи могут не работать, например, если вы жестко ссылаетесь на исполняемый файл). Если файл удален, ядро ​​добавляет (deleted) в цель ссылки. Символьная ссылка /proc/$PID/exename указывает на исполняемый файл. Вы можете получить его содержимое с помощью readlink /proc/$PID/exename. В отличие от информации, сообщенной ps, только пользователь, выполняющий этот процесс, имеет разрешение на чтение целевого объекта ссылки.
7
ответ дан 25 May 2018 в 23:28
  • 1
    Это объяснение работает лучше, чем мое решение. Попробуйте: which " $ (readlink / proc / $ (xdotool getwindowpid $ (xdotool getactivewindow)) / exe) " – zpletan 15 January 2011 в 21:59
  • 2
    @ fred.bear: Спасибо, что заметили это. Обе команды tr предназначены для замены новых строк с нулями. head извлекает первую строку; вся труба tr / head / tr извлекает первый кусок с нулевым завершением. В этом конкретном случае вторая команда tr может быть tr '\0' '\n', так как есть один кусок слева. – Gilles 15 January 2011 в 22:30
  • 3
    @ Gilles .. Спасибо! другая тайна, не имеющая отношения ... очень хорошо объяснила .... (Кстати, похоже, что опечатка снова заиграла ... первый tr args должен быть \\0 \\n) ... и спасибо за бонусную проницательность:. .obfiscate завершающая новая строка, обнуляя ее ... (я не уверен, как bash обрабатывает нули .. Я полагаю, что могу использовать '-d \\ n', пока не получу более полное понимание) .... и еще один бонус (на примере) ... не используя 'cat', когда '& lt;' делает работу ... Я читаю чей-то блог tirrade об этом, и такие вещи, на днях (Рэндал Шварц (возможно, один из «FLOSS Weekly» ... :) – Peter.O 15 January 2011 в 22:32
  • 4
    Просто для записи :), потому что мне это нужно как var, я собираюсь с: cmd="$(</proc/10773/cmdline cut -d '' -f1)" ... – Peter.O 15 January 2011 в 22:58
  • 5
    @ fred.bear: cut самостоятельно не будет работать в редком случае, когда строка для извлечения содержит новую строку. – Gilles 15 January 2011 в 23:24

Все утилиты в любом случае получают информацию из /proc/$PID, но есть (по крайней мере) три места в /proc/$PID, которые содержат имя исполняемого файла в той или иной форме, и сообщают о другой информации.

Поле Name в /proc/$PID/status (также доступно в более сложной форме в /proc/$PID/stat). Это имя исполняемого файла, но усечено до 15 символов. Поскольку ядро ​​выполняет усечение, никакая опция ps не может помочь. Вот что показывает ps -o comm (или его синоним ps -o ucmd). Символьная ссылка /proc/$PID/exename указывает на исполняемый файл. Вы можете получить его содержимое с помощью readlink /proc/$PID/exename. В отличие от информации, сообщенной ps, только пользователь, выполняющий этот процесс, имеет разрешение на чтение цели ссылки. Нулевой аргумент для процесса, выбранный оболочкой или другой программой, которая его вызывала. По соглашению, оболочки выбирают имя исполняемого файла, когда вы ввели его (с полным или без полного пути). Вы можете получить все аргументы из ps с помощью ps -o cmd (или его синонима ps -o command), но аргументы разделены пробелами, поэтому вы не можете достоверно указать, где останавливается нулевой аргумент. Вы можете прочитать аргументы из /proc/cmdline, где они разделены нулевым символом: </proc/$PID/cmdline awk -vRS='\0' '{print; exit;}' извлекает нулевой аргумент.

Для полноты позвольте мне упомянуть, что эти имена могут меняться в течение всего жизненного цикла процесса, хотя большинство программ этого не делают:

Поле Name в /proc/$PID/status (также доступно в более сложной форме в /proc/$PID/stat). Это имя исполняемого файла, но усечено до 15 символов. Поскольку ядро ​​выполняет усечение, никакая опция ps не может помочь. Вот что показывает ps -o comm (или его синоним ps -o ucmd). Исполняемый файл можно переименовать или удалить. В простых случаях Linux отслеживает новое имя (но крайние случаи могут не работать, например, если вы жестко ссылаетесь на исполняемый файл). Если файл удален, ядро ​​добавляет (deleted) в цель ссылки. Символьная ссылка /proc/$PID/exename указывает на исполняемый файл. Вы можете получить его содержимое с помощью readlink /proc/$PID/exename. В отличие от информации, сообщенной ps, только пользователь, выполняющий этот процесс, имеет разрешение на чтение целевого объекта ссылки.
7
ответ дан 25 July 2018 в 22:37

Все утилиты в любом случае получают информацию из /proc/$PID, но есть (по крайней мере) три места в /proc/$PID, которые содержат имя исполняемого файла в той или иной форме, и сообщают о другой информации.

Поле Name в /proc/$PID/status (также доступно в более сложной форме в /proc/$PID/stat). Это имя исполняемого файла, но усечено до 15 символов. Поскольку ядро ​​выполняет усечение, никакая опция ps не может помочь. Вот что показывает ps -o comm (или его синоним ps -o ucmd). Символьная ссылка /proc/$PID/exename указывает на исполняемый файл. Вы можете получить его содержимое с помощью readlink /proc/$PID/exename. В отличие от информации, сообщенной ps, только пользователь, выполняющий этот процесс, имеет разрешение на чтение цели ссылки. Нулевой аргумент для процесса, выбранный оболочкой или другой программой, которая его вызывала. По соглашению, оболочки выбирают имя исполняемого файла, когда вы ввели его (с полным или без полного пути). Вы можете получить все аргументы из ps с помощью ps -o cmd (или его синонима ps -o command), но аргументы разделены пробелами, поэтому вы не можете достоверно указать, где останавливается нулевой аргумент. Вы можете прочитать аргументы из /proc/cmdline, где они разделены нулевым символом: </proc/$PID/cmdline awk -vRS='\0' '{print; exit;}' извлекает нулевой аргумент.

Для полноты позвольте мне упомянуть, что эти имена могут меняться в течение всего жизненного цикла процесса, хотя большинство программ этого не делают:

Поле Name в /proc/$PID/status (также доступно в более сложной форме в /proc/$PID/stat). Это имя исполняемого файла, но усечено до 15 символов. Поскольку ядро ​​выполняет усечение, никакая опция ps не может помочь. Вот что показывает ps -o comm (или его синоним ps -o ucmd). Исполняемый файл можно переименовать или удалить. В простых случаях Linux отслеживает новое имя (но крайние случаи могут не работать, например, если вы жестко ссылаетесь на исполняемый файл). Если файл удален, ядро ​​добавляет (deleted) в цель ссылки. Символьная ссылка /proc/$PID/exename указывает на исполняемый файл. Вы можете получить его содержимое с помощью readlink /proc/$PID/exename. В отличие от информации, сообщенной ps, только пользователь, выполняющий этот процесс, имеет разрешение на чтение целевого объекта ссылки.
7
ответ дан 26 July 2018 в 23:04

Все утилиты в любом случае получают информацию из /proc/$PID, но есть (по крайней мере) три места в /proc/$PID, которые содержат имя исполняемого файла в той или иной форме, и сообщают о другой информации.

Поле Name в /proc/$PID/status (также доступно в более сложной форме в /proc/$PID/stat). Это имя исполняемого файла, но усечено до 15 символов. Поскольку ядро ​​выполняет усечение, никакая опция ps не может помочь. Вот что показывает ps -o comm (или его синоним ps -o ucmd). Символьная ссылка /proc/$PID/exename указывает на исполняемый файл. Вы можете получить его содержимое с помощью readlink /proc/$PID/exename. В отличие от информации, сообщенной ps, только пользователь, выполняющий этот процесс, имеет разрешение на чтение цели ссылки. Нулевой аргумент для процесса, выбранный оболочкой или другой программой, которая его вызывала. По соглашению, оболочки выбирают имя исполняемого файла, когда вы ввели его (с полным или без полного пути). Вы можете получить все аргументы из ps с помощью ps -o cmd (или его синонима ps -o command), но аргументы разделены пробелами, поэтому вы не можете достоверно указать, где останавливается нулевой аргумент. Вы можете прочитать аргументы из /proc/cmdline, где они разделены нулевым символом: </proc/$PID/cmdline awk -vRS='\0' '{print; exit;}' извлекает нулевой аргумент.

Для полноты позвольте мне упомянуть, что эти имена могут меняться в течение всего жизненного цикла процесса, хотя большинство программ этого не делают:

Поле Name в /proc/$PID/status (также доступно в более сложной форме в /proc/$PID/stat). Это имя исполняемого файла, но усечено до 15 символов. Поскольку ядро ​​выполняет усечение, никакая опция ps не может помочь. Вот что показывает ps -o comm (или его синоним ps -o ucmd). Исполняемый файл можно переименовать или удалить. В простых случаях Linux отслеживает новое имя (но крайние случаи могут не работать, например, если вы жестко ссылаетесь на исполняемый файл). Если файл удален, ядро ​​добавляет (deleted) в цель ссылки. Символьная ссылка /proc/$PID/exename указывает на исполняемый файл. Вы можете получить его содержимое с помощью readlink /proc/$PID/exename. В отличие от информации, сообщенной ps, только пользователь, выполняющий этот процесс, имеет разрешение на чтение целевого объекта ссылки.
7
ответ дан 31 July 2018 в 12:21

Все утилиты в любом случае получают информацию из /proc/$PID, но есть (по крайней мере) три места в /proc/$PID, которые содержат имя исполняемого файла в той или иной форме, и сообщают о другой информации.

Поле Name в /proc/$PID/status (также доступно в более сложной форме в /proc/$PID/stat). Это имя исполняемого файла, но усечено до 15 символов. Поскольку ядро ​​выполняет усечение, никакая опция ps не может помочь. Вот что показывает ps -o comm (или его синоним ps -o ucmd). Символьная ссылка /proc/$PID/exename указывает на исполняемый файл. Вы можете получить его содержимое с помощью readlink /proc/$PID/exename. В отличие от информации, сообщенной ps, только пользователь, выполняющий этот процесс, имеет разрешение на чтение цели ссылки. Нулевой аргумент для процесса, выбранный оболочкой или другой программой, которая его вызывала. По соглашению, оболочки выбирают имя исполняемого файла, когда вы ввели его (с полным или без полного пути). Вы можете получить все аргументы из ps с помощью ps -o cmd (или его синонима ps -o command), но аргументы разделены пробелами, поэтому вы не можете достоверно указать, где останавливается нулевой аргумент. Вы можете прочитать аргументы из /proc/cmdline, где они разделены нулевым символом: </proc/$PID/cmdline awk -vRS='\0' '{print; exit;}' извлекает нулевой аргумент.

Для полноты позвольте мне упомянуть, что эти имена могут меняться в течение всего жизненного цикла процесса, хотя большинство программ этого не делают:

Поле Name в /proc/$PID/status (также доступно в более сложной форме в /proc/$PID/stat). Это имя исполняемого файла, но усечено до 15 символов. Поскольку ядро ​​выполняет усечение, никакая опция ps не может помочь. Вот что показывает ps -o comm (или его синоним ps -o ucmd). Исполняемый файл можно переименовать или удалить. В простых случаях Linux отслеживает новое имя (но крайние случаи могут не работать, например, если вы жестко ссылаетесь на исполняемый файл). Если файл удален, ядро ​​добавляет (deleted) в цель ссылки. Символьная ссылка /proc/$PID/exename указывает на исполняемый файл. Вы можете получить его содержимое с помощью readlink /proc/$PID/exename. В отличие от информации, сообщенной ps, только пользователь, выполняющий этот процесс, имеет разрешение на чтение целевого объекта ссылки.
7
ответ дан 2 August 2018 в 04:03

Все утилиты в любом случае получают информацию из /proc/$PID, но есть (по крайней мере) три места в /proc/$PID, которые содержат имя исполняемого файла в той или иной форме, и сообщают о другой информации.

Поле Name в /proc/$PID/status (также доступно в более сложной форме в /proc/$PID/stat). Это имя исполняемого файла, но усечено до 15 символов. Поскольку ядро ​​выполняет усечение, никакая опция ps не может помочь. Вот что показывает ps -o comm (или его синоним ps -o ucmd). Символьная ссылка /proc/$PID/exename указывает на исполняемый файл. Вы можете получить его содержимое с помощью readlink /proc/$PID/exename. В отличие от информации, сообщенной ps, только пользователь, выполняющий этот процесс, имеет разрешение на чтение цели ссылки. Нулевой аргумент для процесса, выбранный оболочкой или другой программой, которая его вызывала. По соглашению, оболочки выбирают имя исполняемого файла, когда вы его ввели (с полным или без полного пути). Вы можете получить все аргументы из ps с помощью ps -o cmd (или его синонима ps -o command), но аргументы разделены пробелами, поэтому вы не можете достоверно указать, где останавливается нулевой аргумент. Вы можете прочитать аргументы из /proc/cmdline, где они разделены нулевым символом: </proc/$PID/cmdline awk -vRS='\0' '{print; exit;}' извлекает нулевой аргумент.

Для полноты позвольте мне упомянуть, что эти имена могут меняться в течение всего жизненного цикла процесса, хотя большинство программ этого не делают:

Поле Name в /proc/$PID/status (также доступно в более сложной форме в /proc/$PID/stat). Это имя исполняемого файла, но усечено до 15 символов. Поскольку ядро ​​выполняет усечение, никакая опция ps не может помочь. Вот что показывает ps -o comm (или его синоним ps -o ucmd). Исполняемый файл можно переименовать или удалить. В простых случаях Linux отслеживает новое имя (но крайние случаи могут не работать, например, если вы жестко ссылаетесь на исполняемый файл). Если файл удален, ядро ​​добавляет (deleted) в цель ссылки. Символьная ссылка /proc/$PID/exename указывает на исполняемый файл. Вы можете получить его содержимое с помощью readlink /proc/$PID/exename. В отличие от информации, сообщенной ps, только пользователь, выполняющий этот процесс, имеет разрешение на чтение целевого объекта ссылки.
7
ответ дан 4 August 2018 в 20:06

Все утилиты в любом случае получают информацию из /proc/$PID, но есть (по крайней мере) три места в /proc/$PID, которые содержат имя исполняемого файла в той или иной форме, и сообщают о другой информации.

Поле Name в /proc/$PID/status (также доступно в более сложной форме в /proc/$PID/stat). Это имя исполняемого файла, но усечено до 15 символов. Поскольку ядро ​​выполняет усечение, никакая опция ps не может помочь. Вот что показывает ps -o comm (или его синоним ps -o ucmd). Символьная ссылка /proc/$PID/exename указывает на исполняемый файл. Вы можете получить его содержимое с помощью readlink /proc/$PID/exename. В отличие от информации, сообщенной ps, только пользователь, выполняющий этот процесс, имеет разрешение на чтение цели ссылки. Нулевой аргумент для процесса, выбранный оболочкой или другой программой, которая его вызывала. По соглашению, оболочки выбирают имя исполняемого файла, когда вы ввели его (с полным или без полного пути). Вы можете получить все аргументы из ps с помощью ps -o cmd (или его синонима ps -o command), но аргументы разделены пробелами, поэтому вы не можете достоверно указать, где останавливается нулевой аргумент. Вы можете прочитать аргументы из /proc/cmdline, где они разделены нулевым символом: </proc/$PID/cmdline awk -vRS='\0' '{print; exit;}' извлекает нулевой аргумент.

Для полноты позвольте мне упомянуть, что эти имена могут меняться в течение всего жизненного цикла процесса, хотя большинство программ этого не делают:

Поле Name в /proc/$PID/status (также доступно в более сложной форме в /proc/$PID/stat). Это имя исполняемого файла, но усечено до 15 символов. Поскольку ядро ​​выполняет усечение, никакая опция ps не может помочь. Вот что показывает ps -o comm (или его синоним ps -o ucmd). Исполняемый файл можно переименовать или удалить. В простых случаях Linux отслеживает новое имя (но крайние случаи могут не работать, например, если вы жестко ссылаетесь на исполняемый файл). Если файл удален, ядро ​​добавляет (deleted) в цель ссылки. Символьная ссылка /proc/$PID/exename указывает на исполняемый файл. Вы можете получить его содержимое с помощью readlink /proc/$PID/exename. В отличие от информации, сообщенной ps, только пользователь, выполняющий этот процесс, имеет разрешение на чтение целевого объекта ссылки.
7
ответ дан 6 August 2018 в 04:07

Все утилиты в любом случае получают информацию из /proc/$PID, но есть (по крайней мере) три места в /proc/$PID, которые содержат имя исполняемого файла в той или иной форме, и сообщают о другой информации.

Поле Name в /proc/$PID/status (также доступно в более сложной форме в /proc/$PID/stat). Это имя исполняемого файла, но усечено до 15 символов. Поскольку ядро ​​выполняет усечение, никакая опция ps не может помочь. Вот что показывает ps -o comm (или его синоним ps -o ucmd). Символьная ссылка /proc/$PID/exename указывает на исполняемый файл. Вы можете получить его содержимое с помощью readlink /proc/$PID/exename. В отличие от информации, сообщенной ps, только пользователь, выполняющий этот процесс, имеет разрешение на чтение цели ссылки. Нулевой аргумент для процесса, выбранный оболочкой или другой программой, которая его вызывала. По соглашению, оболочки выбирают имя исполняемого файла, когда вы его ввели (с полным или без полного пути). Вы можете получить все аргументы из ps с помощью ps -o cmd (или его синонима ps -o command), но аргументы разделены пробелами, поэтому вы не можете достоверно указать, где останавливается нулевой аргумент. Вы можете прочитать аргументы из /proc/cmdline, где они разделены нулевым символом: </proc/$PID/cmdline awk -vRS='\0' '{print; exit;}' извлекает нулевой аргумент.

Для полноты позвольте мне упомянуть, что эти имена могут меняться в течение всего жизненного цикла процесса, хотя большинство программ этого не делают:

Поле Name в /proc/$PID/status (также доступно в более сложной форме в /proc/$PID/stat). Это имя исполняемого файла, но усечено до 15 символов. Поскольку ядро ​​выполняет усечение, никакая опция ps не может помочь. Вот что показывает ps -o comm (или его синоним ps -o ucmd). Исполняемый файл можно переименовать или удалить. В простых случаях Linux отслеживает новое имя (но крайние случаи могут не работать, например, если вы жестко ссылаетесь на исполняемый файл). Если файл удален, ядро ​​добавляет (deleted) в цель ссылки. Символьная ссылка /proc/$PID/exename указывает на исполняемый файл. Вы можете получить его содержимое с помощью readlink /proc/$PID/exename. В отличие от информации, сообщенной ps, только пользователь, выполняющий этот процесс, имеет разрешение на чтение целевого объекта ссылки.
7
ответ дан 6 August 2018 в 04:08

Все утилиты получают информацию из / proc / $ PID в любом случае, но есть (по крайней мере) три места в / proc / $ PID , которые содержат имя исполняемый файл в некоторой форме, и они сообщают о различной информации.

  • Поле Name в / proc / $ PID / status (также доступно в более сложной форме в / proc / $ PID / stat ). Это имя исполняемого файла, но усечено до 15 символов. Поскольку ядро ​​выполняет усечение, никакая опция ps не может помочь. Это ps -o comm (или его синоним ps -o ucmd ).
  • Символическая ссылка / proc / $ PID / exename указывает на исполняемый файл. Вы можете получить его содержимое с помощью readlink / proc / $ PID / exename . В отличие от информации, сообщенной ps , только пользователь, выполняющий этот процесс, имеет разрешение на чтение целевого объекта ссылки.
  • Нулевой аргумент процессу, выбранный оболочкой или другой программой который вызвал его. По соглашению, оболочки выбирают имя исполняемого файла, когда вы его ввели (с полным или без полного пути). Вы можете получить все аргументы из ps с ps -o cmd (или его синоним ps -o command ), но аргументы разделены чтобы вы не могли достоверно указать, где останавливается нулевой аргумент. Вы можете прочитать аргументы из / proc / cmdline , где они разделены нулевым символом: & lt; / proc / $ PID / cmdline awk -vRS = '\ 0' '{print; exit;} ' извлекает нулевой аргумент.

Для полноты позвольте мне упомянуть, что эти имена могут меняться в течение всего жизненного цикла процесса, хотя большинство программ этого не делают :

  • Процесс может изменить поле Name в / proc / $ PID / status , вызвав prctl с аргумент PR_SET_NAME .
  • Исполняемый файл можно переименовать или удалить. В простых случаях Linux отслеживает новое имя (но крайние случаи могут не работать, например, если вы жестко ссылаетесь на исполняемый файл). Если файл удален, ядро ​​добавляет (удалено) к цели ссылки.
  • Нулевой аргумент процессу считывается из памяти процесса (это argv [0 ] в C). Процесс может свободно его изменять.
7
ответ дан 7 August 2018 в 22:07

Все утилиты получают информацию из / proc / $ PID в любом случае, но есть (по крайней мере) три места в / proc / $ PID , которые содержат имя исполняемый файл в некоторой форме, и они сообщают о различной информации.

  • Поле Name в / proc / $ PID / status (также доступно в более сложной форме в / proc / $ PID / stat ). Это имя исполняемого файла, но усечено до 15 символов. Поскольку ядро ​​выполняет усечение, никакая опция ps не может помочь. Это ps -o comm (или его синоним ps -o ucmd ).
  • Символическая ссылка / proc / $ PID / exename указывает на исполняемый файл. Вы можете получить его содержимое с помощью readlink / proc / $ PID / exename . В отличие от информации, сообщенной ps , только пользователь, выполняющий этот процесс, имеет разрешение на чтение целевого объекта ссылки.
  • Нулевой аргумент процессу, выбранный оболочкой или другой программой который вызвал его. По соглашению, оболочки выбирают имя исполняемого файла, когда вы его ввели (с полным или без полного пути). Вы можете получить все аргументы из ps с ps -o cmd (или его синоним ps -o command ), но аргументы разделены чтобы вы не могли достоверно указать, где останавливается нулевой аргумент. Вы можете прочитать аргументы из / proc / cmdline , где они разделены нулевым символом: & lt; / proc / $ PID / cmdline awk -vRS = '\ 0' '{print; exit;} ' извлекает нулевой аргумент.

Для полноты позвольте мне упомянуть, что эти имена могут меняться в течение всего жизненного цикла процесса, хотя большинство программ этого не делают :

  • Процесс может изменить поле Name в / proc / $ PID / status , вызвав prctl с аргумент PR_SET_NAME .
  • Исполняемый файл можно переименовать или удалить. В простых случаях Linux отслеживает новое имя (но крайние случаи могут не работать, например, если вы жестко ссылаетесь на исполняемый файл). Если файл удален, ядро ​​добавляет (удалено) к цели ссылки.
  • Нулевой аргумент процессу считывается из памяти процесса (это argv [0 ] в C). Процесс может свободно его изменять.
7
ответ дан 10 August 2018 в 10:21

Все утилиты получают информацию из / proc / $ PID в любом случае, но есть (по крайней мере) три места в / proc / $ PID , которые содержат имя исполняемый файл в некоторой форме, и они сообщают о различной информации.

  • Поле Name в / proc / $ PID / status (также доступно в более сложной форме в / proc / $ PID / stat ). Это имя исполняемого файла, но усечено до 15 символов. Поскольку ядро ​​выполняет усечение, никакая опция ps не может помочь. Это ps -o comm (или его синоним ps -o ucmd ).
  • Символическая ссылка / proc / $ PID / exename указывает на исполняемый файл. Вы можете получить его содержимое с помощью readlink / proc / $ PID / exename . В отличие от информации, сообщенной ps , только пользователь, выполняющий этот процесс, имеет разрешение на чтение целевого объекта ссылки.
  • Нулевой аргумент процессу, выбранный оболочкой или другой программой который вызвал его. По соглашению, оболочки выбирают имя исполняемого файла, когда вы его ввели (с полным или без полного пути). Вы можете получить все аргументы из ps с ps -o cmd (или его синоним ps -o command ), но аргументы разделены чтобы вы не могли достоверно указать, где останавливается нулевой аргумент. Вы можете прочитать аргументы из / proc / cmdline , где они разделены нулевым символом: & lt; / proc / $ PID / cmdline awk -vRS = '\ 0' '{print; exit;} ' извлекает нулевой аргумент.

Для полноты позвольте мне упомянуть, что эти имена могут меняться в течение всего жизненного цикла процесса, хотя большинство программ этого не делают :

  • Процесс может изменить поле Name в / proc / $ PID / status , вызвав prctl с аргумент PR_SET_NAME .
  • Исполняемый файл можно переименовать или удалить. В простых случаях Linux отслеживает новое имя (но крайние случаи могут не работать, например, если вы жестко ссылаетесь на исполняемый файл). Если файл удален, ядро ​​добавляет (удалено) к цели ссылки.
  • Нулевой аргумент процессу считывается из памяти процесса (это argv [0 ] в C). Процесс может свободно его изменять.
7
ответ дан 13 August 2018 в 16:46
  • 1
    Это объяснение работает лучше, чем мое решение. Попробуйте: which & quot; $ (readlink / proc / $ (xdotool getwindowpid $ (xdotool getactivewindow)) / exe) & quot; – zpletan 15 January 2011 в 21:59
  • 2
    @ fred.bear: Спасибо, что заметили это. Обе команды tr предназначены для замены новых строк с нулями. head извлекает первую строку; вся труба tr / head / tr извлекает первый кусок с нулевым завершением. В этом конкретном случае вторая команда tr может быть tr '\ 0' '\n' , так как осталось один кусок. – Gilles 15 January 2011 в 22:30
  • 3
    @ Gilles .. Спасибо! другая тайна, не имеющая отношения ... очень хорошо объяснили .... (Кстати ... Кажется, опечатка снова пробилась ... первый tr args должен быть \\ 0 \\n [ ! d1]) ... и спасибо за понимание бонуса: ..оббавить конечную новую строку, обнуляя ее ... (Я не уверен, как bash обрабатывает значения null .. Я полагаю, что могу использовать '-d \\n 'пока я не получу более полное понимание) .... и еще один бонус (на примере) ... не используя' cat ', когда' & lt; ' делает работу ... Я читаю чей-то блог tirrade об этом, и такие вещи, на днях (Рэндал Шварц (возможно, один из «FLOSS Weekly» ... :) – Peter.O 15 January 2011 в 22:32
  • 4
    Просто для записи :), потому что мне нужно это как var, я собираюсь с: cmd = & quot; $ (& lt; / proc / 10773 / cmdline cut -d '' -f1) & quot; ... – Peter.O 15 January 2011 в 22:58
  • 5
    @ fred.bear: cut самостоятельно не будет работать в редком случае, когда строка для извлечения содержит новую строку. – Gilles 15 January 2011 в 23:24
ps $PID | tail -1 | awk '{i=5; while (i<NF) {printf "%s ", $i; i++}; print $NF}'

Где $ PID - это PID, который у вас есть. Вероятно, полная команда, которую вы хотите (по вашему вопросу выше):

which "$(ps $(xdotool getwindowpid $(xdotool getactivewindow)) | tail -1 | awk '{i=5; while (i<NF) {printf "%s ", $i; i++}; print $NF}')"
0
ответ дан 25 May 2018 в 23:28
  • 1
    .. До определенного момента ваше решение работает. Однако мой вопрос относится к за пределами , что точка ... т.е. когда команда имеет 3 конкретных атрибута ... (1) Базовое имя длиннее 15 ... (2) Оно имеет встроенные пространства ... (3) Существуют Args ... например. В / usr / bin сделайте ссылку: 'Link to gedit with spaces' ... Запустите эту ссылку с Arg 'test file' ... Затем получите свой PID ... Тогда команда ps $PID возвращает это: /usr/bin/Link to gedit with spaces test file ... Как вы можете видеть, этот вывод ps не может быть проанализирован. Где начинаются Args? ... – Peter.O 15 January 2011 в 21:37
  • 2
    Да, теперь я понимаю. Сожалею! См. Мой комментарий к решению Gilles ниже. – zpletan 15 January 2011 в 22:00
  • 3
    Я наконец добрался до тестирования вашего предложения (в комментарии Гилла). Опять же, он работает, но только до определенной точки; a отличается на этот раз ... Как упоминает Гилл во втором пункте (около / proc / $ PID / exe). "только пользователь, выполняющий этот процесс, имеет разрешение на чтение целевого объекта ссылки. " ... Третий метод, который он упоминает, однако доступен ... например. Я, как «пользователь», не может получить доступ к принадлежащей рунете цели «../exe», но я могу получить доступ к корневому «../cmdline» ... (Это, конечно, было интересное небольшое путешествие .;) PS Спасибо за указание xdotools getwindowpid .. Я пропустил это полностью ~ – Peter.O 16 January 2011 в 08:21
  • 4
    Хммм. Это правда, я полагаю. Я предположил (плохо, что нужно делать!), Что у вас будет активное окно; Я предполагаю, что есть случаи (например, Synaptic), где это не так. Сожалею. – zpletan 16 January 2011 в 17:09
ps $PID | tail -1 | awk '{i=5; while (i<NF) {printf "%s ", $i; i++}; print $NF}'

Где $ PID - это PID, который у вас есть. Вероятно, полная команда, которую вы хотите (по вашему вопросу выше):

which "$(ps $(xdotool getwindowpid $(xdotool getactivewindow)) | tail -1 | awk '{i=5; while (i<NF) {printf "%s ", $i; i++}; print $NF}')"
0
ответ дан 25 July 2018 в 22:37
  • 1
    .. До определенного момента ваше решение работает. Однако мой вопрос относится к за пределами , что точка ... т.е. когда команда имеет 3 конкретных атрибута ... (1) Базовое имя длиннее 15 ... (2) Оно имеет встроенные пространства ... (3) Существуют Args ... например. В / usr / bin сделайте ссылку: 'Link to gedit with spaces' ... Запустите эту ссылку с Arg 'test file' ... Затем получите свой PID ... Тогда команда ps $PID возвращает это: /usr/bin/Link to gedit with spaces test file ... Как вы можете видеть, этот вывод ps не может быть проанализирован. Где начинаются Args? ... – Peter.O 15 January 2011 в 21:37
  • 2
    Да, теперь я понимаю. Сожалею! См. Мой комментарий к решению Gilles ниже. – zpletan 15 January 2011 в 22:00
  • 3
    Я наконец добрался до тестирования вашего предложения (в комментарии Гилла). Опять же, он работает, но только до определенной точки; a отличается на этот раз ... Как упоминает Гилл во втором пункте (около / proc / $ PID / exe). "только пользователь, выполняющий этот процесс, имеет разрешение на чтение целевого объекта ссылки. & quot; ... Третий метод, который он упоминает, однако доступен ... например. Я, как «пользователь», не может получить доступ к принадлежащей рунете цели «../exe», но я могу получить доступ к корневому «../cmdline» ... (Это, конечно, было интересное небольшое путешествие .;) PS Спасибо за указание xdotools getwindowpid .. Я пропустил это полностью ~ – Peter.O 16 January 2011 в 08:21
  • 4
    Хммм. Это правда, я полагаю. Я предположил (плохо, что нужно делать!), Что у вас будет активное окно; Я предполагаю, что есть случаи (например, Synaptic), где это не так. Сожалею. – zpletan 16 January 2011 в 17:09
ps $PID | tail -1 | awk '{i=5; while (i<NF) {printf "%s ", $i; i++}; print $NF}'

Где $ PID - это PID, который у вас есть. Вероятно, полная команда, которую вы хотите (по вашему вопросу выше):

which "$(ps $(xdotool getwindowpid $(xdotool getactivewindow)) | tail -1 | awk '{i=5; while (i<NF) {printf "%s ", $i; i++}; print $NF}')"
0
ответ дан 26 July 2018 в 23:04
  • 1
    .. До определенного момента ваше решение работает. Однако мой вопрос относится к за пределами , что точка ... т.е. когда команда имеет 3 конкретных атрибута ... (1) Базовое имя длиннее 15 ... (2) Оно имеет встроенные пространства ... (3) Существуют Args ... например. В / usr / bin сделайте ссылку: 'Link to gedit with spaces' ... Запустите эту ссылку с Arg 'test file' ... Затем получите свой PID ... Тогда команда ps $PID возвращает это: /usr/bin/Link to gedit with spaces test file ... Как вы можете видеть, этот вывод ps не может быть проанализирован. Где начинаются Args? ... – Peter.O 15 January 2011 в 21:37
  • 2
    Да, теперь я понимаю. Сожалею! См. Мой комментарий к решению Gilles ниже. – zpletan 15 January 2011 в 22:00
  • 3
    Я наконец добрался до тестирования вашего предложения (в комментарии Гилла). Опять же, он работает, но только до определенной точки; a отличается на этот раз ... Как упоминает Гилл во втором пункте (около / proc / $ PID / exe). "только пользователь, выполняющий этот процесс, имеет разрешение на чтение целевого объекта ссылки. & quot; ... Третий метод, который он упоминает, однако доступен ... например. Я, как «пользователь», не может получить доступ к принадлежащей рунете цели «../exe», но я могу получить доступ к корневому «../cmdline» ... (Это, конечно, было интересное небольшое путешествие .;) PS Спасибо за указание xdotools getwindowpid .. Я пропустил это полностью ~ – Peter.O 16 January 2011 в 08:21
  • 4
    Хммм. Это правда, я полагаю. Я предположил (плохо, что нужно делать!), Что у вас будет активное окно; Я предполагаю, что есть случаи (например, Synaptic), где это не так. Сожалею. – zpletan 16 January 2011 в 17:09
ps $PID | tail -1 | awk '{i=5; while (i<NF) {printf "%s ", $i; i++}; print $NF}'

Где $ PID - это PID, который у вас есть. Вероятно, полная команда, которую вы хотите (по вашему вопросу выше):

which "$(ps $(xdotool getwindowpid $(xdotool getactivewindow)) | tail -1 | awk '{i=5; while (i<NF) {printf "%s ", $i; i++}; print $NF}')"
0
ответ дан 31 July 2018 в 12:21
  • 1
    .. До определенного момента ваше решение работает. Однако мой вопрос относится к за пределами , что точка ... т.е. когда команда имеет 3 конкретных атрибута ... (1) Базовое имя длиннее 15 ... (2) Оно имеет встроенные пространства ... (3) Существуют Args ... например. В / usr / bin сделайте ссылку: 'Link to gedit with spaces' ... Запустите эту ссылку с Arg 'test file' ... Затем получите свой PID ... Тогда команда ps $PID возвращает это: /usr/bin/Link to gedit with spaces test file ... Как вы можете видеть, этот вывод ps не может быть проанализирован. Где начинаются Args? ... – Peter.O 15 January 2011 в 21:37
  • 2
    Да, теперь я понимаю. Сожалею! См. Мой комментарий к решению Gilles ниже. – zpletan 15 January 2011 в 22:00
  • 3
    Я наконец добрался до тестирования вашего предложения (в комментарии Гилла). Опять же, он работает, но только до определенной точки; a отличается на этот раз ... Как упоминает Гилл во втором пункте (около / proc / $ PID / exe). "только пользователь, выполняющий этот процесс, имеет разрешение на чтение целевого объекта ссылки. & quot; ... Третий метод, который он упоминает, однако доступен ... например. Я, как «пользователь», не может получить доступ к принадлежащей рунете цели «../exe», но я могу получить доступ к корневому «../cmdline» ... (Это, конечно, было интересное небольшое путешествие .;) PS Спасибо за указание xdotools getwindowpid .. Я пропустил это полностью ~ – Peter.O 16 January 2011 в 08:21
  • 4
    Хммм. Это правда, я полагаю. Я предположил (плохо, что нужно делать!), Что у вас будет активное окно; Я предполагаю, что есть случаи (например, Synaptic), где это не так. Сожалею. – zpletan 16 January 2011 в 17:09
ps $PID | tail -1 | awk '{i=5; while (i<NF) {printf "%s ", $i; i++}; print $NF}'

Где $ PID - это PID, который у вас есть. Вероятно, полная команда, которую вы хотите (по вашему вопросу выше):

which "$(ps $(xdotool getwindowpid $(xdotool getactivewindow)) | tail -1 | awk '{i=5; while (i<NF) {printf "%s ", $i; i++}; print $NF}')"
0
ответ дан 2 August 2018 в 04:03
  • 1
    .. До определенного момента ваше решение работает. Однако мой вопрос относится к за пределами , что точка ... т.е. когда команда имеет 3 конкретных атрибута ... (1) Базовое имя длиннее 15 ... (2) Оно имеет встроенные пространства ... (3) Существуют Args ... например. В / usr / bin сделайте ссылку: 'Link to gedit with spaces' ... Запустите эту ссылку с Arg 'test file' ... Затем получите свой PID ... Тогда команда ps $PID возвращает это: /usr/bin/Link to gedit with spaces test file ... Как вы можете видеть, этот вывод ps не может быть проанализирован. Где начинаются Args? ... – Peter.O 15 January 2011 в 21:37
  • 2
    Да, теперь я понимаю. Сожалею! См. Мой комментарий к решению Gilles ниже. – zpletan 15 January 2011 в 22:00
  • 3
    Я наконец добрался до тестирования вашего предложения (в комментарии Гилла). Опять же, он работает, но только до определенной точки; a отличается на этот раз ... Как упоминает Гилл во втором пункте (около / proc / $ PID / exe). "только пользователь, выполняющий этот процесс, имеет разрешение на чтение целевого объекта ссылки. & quot; ... Третий метод, который он упоминает, однако доступен ... например. Я, как «пользователь», не может получить доступ к принадлежащей рунете цели «../exe», но я могу получить доступ к корневому «../cmdline» ... (Это, конечно, было интересное небольшое путешествие .;) PS Спасибо за указание xdotools getwindowpid .. Я пропустил это полностью ~ – Peter.O 16 January 2011 в 08:21
  • 4
    Хммм. Это правда, я полагаю. Я предположил (плохо, что нужно делать!), Что у вас будет активное окно; Я предполагаю, что есть случаи (например, Synaptic), где это не так. Сожалею. – zpletan 16 January 2011 в 17:09
ps $PID | tail -1 | awk '{i=5; while (i<NF) {printf "%s ", $i; i++}; print $NF}'

Где $ PID - это PID, который у вас есть. Вероятно, полная команда, которую вы хотите (по вашему вопросу выше):

which "$(ps $(xdotool getwindowpid $(xdotool getactivewindow)) | tail -1 | awk '{i=5; while (i<NF) {printf "%s ", $i; i++}; print $NF}')"
0
ответ дан 4 August 2018 в 20:06
  • 1
    .. До определенного момента ваше решение работает. Однако мой вопрос относится к за пределами , что точка ... т.е. когда команда имеет 3 конкретных атрибута ... (1) Базовое имя длиннее 15 ... (2) Оно имеет встроенные пространства ... (3) Существуют Args ... например. В / usr / bin сделайте ссылку: 'Link to gedit with spaces' ... Запустите эту ссылку с Arg 'test file' ... Затем получите свой PID ... Тогда команда ps $PID возвращает это: /usr/bin/Link to gedit with spaces test file ... Как вы можете видеть, этот вывод ps не может быть проанализирован. Где начинаются Args? ... – Peter.O 15 January 2011 в 21:37
  • 2
    Да, теперь я понимаю. Сожалею! См. Мой комментарий к решению Gilles ниже. – zpletan 15 January 2011 в 22:00
  • 3
    Я наконец добрался до тестирования вашего предложения (в комментарии Гилла). Опять же, он работает, но только до определенной точки; a отличается на этот раз ... Как упоминает Гилл во втором пункте (около / proc / $ PID / exe). "только пользователь, выполняющий этот процесс, имеет разрешение на чтение целевого объекта ссылки. & quot; ... Третий метод, который он упоминает, однако доступен ... например. Я, как «пользователь», не может получить доступ к принадлежащей рунете цели «../exe», но я могу получить доступ к корневому «../cmdline» ... (Это, конечно, было интересное небольшое путешествие .;) PS Спасибо за указание xdotools getwindowpid .. Я пропустил это полностью ~ – Peter.O 16 January 2011 в 08:21
  • 4
    Хммм. Это правда, я полагаю. Я предположил (плохо, что нужно делать!), Что у вас будет активное окно; Я предполагаю, что есть случаи (например, Synaptic), где это не так. Сожалею. – zpletan 16 January 2011 в 17:09
ps $PID | tail -1 | awk '{i=5; while (i<NF) {printf "%s ", $i; i++}; print $NF}'

Где $ PID - это PID, который у вас есть. Вероятно, полная команда, которую вы хотите (по вашему вопросу выше):

which "$(ps $(xdotool getwindowpid $(xdotool getactivewindow)) | tail -1 | awk '{i=5; while (i<NF) {printf "%s ", $i; i++}; print $NF}')"
0
ответ дан 6 August 2018 в 04:07
  • 1
    .. До определенного момента ваше решение работает. Однако мой вопрос относится к за пределами , что точка ... т.е. когда команда имеет 3 конкретных атрибута ... (1) Базовое имя длиннее 15 ... (2) Оно имеет встроенные пространства ... (3) Существуют Args ... например. В / usr / bin сделайте ссылку: 'Link to gedit with spaces' ... Запустите эту ссылку с Arg 'test file' ... Затем получите свой PID ... Тогда команда ps $PID возвращает это: /usr/bin/Link to gedit with spaces test file ... Как вы можете видеть, этот вывод ps не может быть проанализирован. Где начинаются Args? ... – Peter.O 15 January 2011 в 21:37
  • 2
    Да, теперь я понимаю. Сожалею! См. Мой комментарий к решению Gilles ниже. – zpletan 15 January 2011 в 22:00
  • 3
    Я наконец добрался до тестирования вашего предложения (в комментарии Гилла). Опять же, он работает, но только до определенной точки; a отличается на этот раз ... Как упоминает Гилл во втором пункте (около / proc / $ PID / exe). "только пользователь, выполняющий этот процесс, имеет разрешение на чтение целевого объекта ссылки. & quot; ... Третий метод, который он упоминает, однако доступен ... например. Я, как «пользователь», не может получить доступ к принадлежащей рунете цели «../exe», но я могу получить доступ к корневому «../cmdline» ... (Это, конечно, было интересное небольшое путешествие .;) PS Спасибо за указание xdotools getwindowpid .. Я пропустил это полностью ~ – Peter.O 16 January 2011 в 08:21
  • 4
    Хммм. Это правда, я полагаю. Я предположил (плохо, что нужно делать!), Что у вас будет активное окно; Я предполагаю, что есть случаи (например, Synaptic), где это не так. Сожалею. – zpletan 16 January 2011 в 17:09
ps $PID | tail -1 | awk '{i=5; while (i<NF) {printf "%s ", $i; i++}; print $NF}'

Где $ PID - это PID, который у вас есть. Вероятно, полная команда, которую вы хотите (по вашему вопросу выше):

which "$(ps $(xdotool getwindowpid $(xdotool getactivewindow)) | tail -1 | awk '{i=5; while (i<NF) {printf "%s ", $i; i++}; print $NF}')"
0
ответ дан 6 August 2018 в 04:08
  • 1
    .. До определенного момента ваше решение работает. Однако мой вопрос относится к за пределами , что точка ... т.е. когда команда имеет 3 конкретных атрибута ... (1) Базовое имя длиннее 15 ... (2) Оно имеет встроенные пространства ... (3) Существуют Args ... например. В / usr / bin сделайте ссылку: 'Link to gedit with spaces' ... Запустите эту ссылку с Arg 'test file' ... Затем получите свой PID ... Тогда команда ps $PID возвращает это: /usr/bin/Link to gedit with spaces test file ... Как вы можете видеть, этот вывод ps не может быть проанализирован. Где начинаются Args? ... – Peter.O 15 January 2011 в 21:37
  • 2
    Да, теперь я понимаю. Сожалею! См. Мой комментарий к решению Gilles ниже. – zpletan 15 January 2011 в 22:00
  • 3
    Я наконец добрался до тестирования вашего предложения (в комментарии Гилла). Опять же, он работает, но только до определенной точки; a отличается на этот раз ... Как упоминает Гилл во втором пункте (около / proc / $ PID / exe). "только пользователь, выполняющий этот процесс, имеет разрешение на чтение целевого объекта ссылки. & quot; ... Третий метод, который он упоминает, однако доступен ... например. Я, как «пользователь», не может получить доступ к принадлежащей рунете цели «../exe», но я могу получить доступ к корневому «../cmdline» ... (Это, конечно, было интересное небольшое путешествие .;) PS Спасибо за указание xdotools getwindowpid .. Я пропустил это полностью ~ – Peter.O 16 January 2011 в 08:21
  • 4
    Хммм. Это правда, я полагаю. Я предположил (плохо, что нужно делать!), Что у вас будет активное окно; Я предполагаю, что есть случаи (например, Synaptic), где это не так. Сожалею. – zpletan 16 January 2011 в 17:09
  ps $ PID |  хвост -1 |  awk '{i = 5;  while (i & lt; NF) {printf "% s", $ i;  я ++};  print $ NF} ' 

Где $ PID - это PID, который у вас есть. Вероятно, полная команда, которую вы хотите (по вашему вопросу выше):

 , который «$ (ps $ (xdotool getwindowpid $ (xdotool getactivewindow)) | tail -1 | awk '{i =  5; while (i & lt; NF) {printf "% s", $ i; i ++}; print $ NF} ') " 
0
ответ дан 7 August 2018 в 22:07
  ps $ PID |  хвост -1 |  awk '{i = 5;  while (i & lt; NF) {printf "% s", $ i;  я ++};  print $ NF} ' 

Где $ PID - это PID, который у вас есть. Вероятно, полная команда, которую вы хотите (по вашему вопросу выше):

 , который «$ (ps $ (xdotool getwindowpid $ (xdotool getactivewindow)) | tail -1 | awk '{i =  5; while (i & lt; NF) {printf "% s", $ i; i ++}; print $ NF} ') " 
0
ответ дан 10 August 2018 в 10:21
  ps $ PID |  хвост -1 |  awk '{i = 5;  while (i & lt; NF) {printf "% s", $ i;  я ++};  print $ NF} ' 

Где $ PID - это PID, который у вас есть. Вероятно, полная команда, которую вы хотите (по вашему вопросу выше):

 , который «$ (ps $ (xdotool getwindowpid $ (xdotool getactivewindow)) | tail -1 | awk '{i =  5; while (i & lt; NF) {printf "% s", $ i; i ++}; print $ NF} ') " 
0
ответ дан 13 August 2018 в 16:46
  • 1
    .. До определенного момента ваше решение работает. Однако мой вопрос относится к за пределами , что точка ... т.е. когда команда имеет 3 конкретных атрибута ... (1) Базовое имя длиннее 15 ... (2) Оно имеет встроенные пространства ... (3) Существуют Args ... например. В / usr / bin сделайте ссылку: 'Ссылка на gedit с пробелами' ... Запустите эту ссылку с тестовым файлом Arg ' ... Затем получите свой PID ... Затем часть команды ps $ PID возвращает это: / usr / bin / Ссылка на gedit с тестовым файлом пробелов ... Как вы можете видеть это ps вывод не поддается анализу. Где начинаются Args? ... – Peter.O 15 January 2011 в 21:37
  • 2
    Да, теперь я понимаю. Сожалею! См. Мой комментарий к решению Gilles ниже. – zpletan 15 January 2011 в 22:00
  • 3
    Я наконец добрался до тестирования вашего предложения (в комментарии Гилла). Опять же, он работает, но только до определенной точки; a different на этот раз ... Как упоминает Гилл во втором пункте (о / proc / $ PID / exe). "только пользователь, выполняющий этот процесс, имеет разрешение на чтение целевой цели. & quot; ... Однако третий способ, который он упоминает, доступен ... например. Я, как «пользователь», не может получить доступ к принадлежащей рунете цели «../exe», но я могу получить доступ к корневому «../cmdline» ... (Это, конечно, было интересное небольшое путешествие .;) PS Спасибо за указание xdotools getwindowpid .. Я пропустил это полностью ~ – Peter.O 16 January 2011 в 08:21
  • 4
    Хммм. Это правда, я полагаю. Я предположил (плохо, что нужно делать!), Что у вас будет активное окно; Я предполагаю, что есть случаи (например, Synaptic), где это не так. Сожалею. – zpletan 16 January 2011 в 17:09

Другие вопросы по тегам:

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