Не удалось запустить DHCP-скрипт

Несмотря на то, что /proc упоминается кратко выше как источник информации для изучения процессов в системе, я включаю здесь базовый скрипт Bash для анализа некоторой информации из него. Для превосходного введения в виртуальную файловую систему /proc см. Эту статью IBM, в которой объясняется, как она может быть полезной как для пользователей, так и для программистов.

Анализ синтаксического кода /proc с общим сценарием может быть ненадежным, поскольку разные процессы часто имеют разные макеты /proc, но базовую информацию обычно можно почерпнуть с помощью этого скрипта, хотя ее, возможно, придется изменить, если вы хотите проанализировать любую другую конкретную информацию. Я написал его с помощью Bash, но есть более сильные синтаксические анализаторы, которые вы могли бы исследовать, если хотите написать его, используя другой язык сценариев.

Часто в выводе скрипта вы можете увидеть сообщение «отказано в разрешении», что означает, что местоположение /proc не читается $ USER, поэтому вы можете запустить скрипт как root, если хотите

Скопируйте тело сценария в новый файл, сохраните его и сделайте его исполняемым (chmod u+x), а затем вызовите его хотя бы одним аргументом (теперь он может обрабатывать несколько процессов одновременно):

./proc_script xfce4-panel

или поместить его в свой $HOME/bin, а затем вы можете запускать его, как и другие программы, если $HOME/bin находится на вашем пути. (Однако, если вы используете sudo, вам все равно придется указывать абсолютное расположение пути к сценарию, поскольку $HOME/bin не находится в корневом пути.)

Тело скрипта; он также доступен и обновлен в этой статье IBM :

#!/usr/bin/env bash  

(( $# == 0 )) && { printf "Usage: Please specify the name of one process \
to research.\n" >&2; exit 1; }

args=("$@")                   
for process in "${args[@]}"; do                    
    # store user input in a variable and warn then exit if program is not running
    queried_pid="$(pgrep "${process}" || { printf '%s\n' "No such program" >&2; })"

    # add the contents of the variable into an array
    pidarray=($(echo "$queried_pid"))

    # iterate over the array, however many pids have been found
    for i in "${pidarray[@]}"; do 
        printf "Pid is: %s\nExe is: %s\nCmdline is: %s\ncwd is: %s\n" "$(echo "$i")" \
    "$(stat -c %N /proc/"$i"/exe)" "$(cat /proc/"$i"/cmdline)" "$(cd /proc/"$i"/cwd/; pwd -P)"
    done
    printf "\n\n"
done

exit 

Пример вывода 1:

./proc_parse firefox


Pid is: 1830
Exe is: `/proc/1830/exe' -> `/usr/lib/firefox/firefox'
Cmdline is: /usr/lib/firefox/firefox
cwd is: /home/mike

Образец вывода 2 (имеющий дело с несколькими сообщениями ):

./proc_parse evince

Pid is: 3113
Exe is: `/proc/3113/exe' -> `/usr/bin/evince'
Cmdline is: evince/home/mike/Z_IBM_lpic_Linux_pdfs/l-proc-pdf.pdf
cwd is: /home/mike
Pid is: 3119
Exe is: `/proc/3119/exe' -> `/usr/lib/evince/evinced'
Cmdline is: /usr/lib/evince/evinced
cwd is: /

1
задан 25 March 2015 в 00:20

0 ответов

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

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