Вы можете ввести команду
arp -aв терминале, чтобы увидеть компьютеры на Lan.
Отсюда:
xprop | awk '($1=="_NET_WM_PID(CARDINAL)") {print $3}' | xargs ps h -o pid,cmd
Если вам нужна только начальная командная строка, тогда просто:
xprop | awk '($1=="_NET_WM_PID(CARDINAL)") {print $3}' | xargs ps h -o cmd
После запуска команды просто щелкните по окну для который вы хотите, чтобы команда запуска была показана.
Альтернативный скрипт:
#!/bin/bash
# Copyright © 2013 minerz029
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
shopt -s extglob
for var in 'wm_pid' 'wm_name' 'wm_class' 'cmdline' 'wm_id'; do
declare "$var"'=Not found'
done
notify-send -t 3000 'Click on a window to get the command line...'
xprop_out="$(xprop)"
while IFS=$'\n' read -r -d $'\n' line; do
if [[ "$line" == '_NET_WM_PID(CARDINAL) = '* ]]; then
wm_pid="${line#_NET_WM_PID(CARDINAL) = }"
elif [[ "$line" == 'WM_NAME('?(UTF8_)'STRING) = '* ]]; then
wm_name="${line#WM_NAME(?(UTF8_)STRING) = }"
elif [[ "$line" == 'WM_CLASS('?(UTF8_)'STRING) = '* ]]; then
wm_class="${line#WM_CLASS(?(UTF8_)STRING) = }"
elif [[ "$line" == 'WM_CLIENT_LEADER(WINDOW): window id # '* ]]; then
wm_id="${line#WM_CLIENT_LEADER(WINDOW): window id # }"
fi
done <<< "$xprop_out"
if [[ "$wm_pid" == +([0-9]) ]]; then
quote ()
{
local quoted="${1//\'/\'\\\'\'}";
out="$(printf "'%s'" "$quoted")"
if eval echo -n "$out" >/dev/null 2>&1; then
echo "$out"
else
echo "SEVERE QUOTING ERROR"
echo "IN: $1"
echo -n "OUT: "
eval echo -n "$out"
fi
}
cmdline=()
while IFS= read -d '' -r arg; do
cmdline+=("$(quote "$arg")")
done < "/proc/$wm_pid/cmdline"
fi
text="\
Title:
$wm_name
Class:
$wm_class
ID:
$wm_id
PID:
$wm_pid
Command line:
${cmdline[@]}"
copy() {
{ echo -n "$1" | xsel -i -b >/dev/null; } && xsel -k
}
if [[ -t 1 ]]; then
echo "$text"
if [[ "$1" == '--copy' ]]; then
echo "Copied"
copy "$cmdline"
fi
else
zenity \
--title='Window information' \
--width=750 \
--height=300 \
--no-wrap \
--font='Ubuntu Mono 11' \
--text-info \
--cancel-label='Copy' \
--ok-label='Close' \
<<< "$text"
if [[ $? == 1 ]]; then
copy "$cmdline"
fi
fi
Использование:
Сохраните вышеуказанный скрипт в файл и сделайте его исполняемым. Запустите файл двойным щелчком и выберите «Выполнить». Нажмите на окно, в котором вы хотели бы знать команду. Информация будет отображаться вам. (Title, PID, ID, class и command line). Вы можете нажать кнопку «Копировать», чтобы скопировать командную строку в буфер обмена. Для этого необходимо установить xsel.
В качестве альтернативы, не требующей сценария, вы можете просто открыть системный монитор и навести указатель мыши на процесс, который вы хотели бы знать в командной строке.
Если вы включите «Вид зависимостей», вы сможете увидеть, какой процесс называется другим, например, вы можете увидеть различные процессы, которые Chrome создает для каждой вкладки, и отследить их обратно в родительский который будет иметь командную строку, с которой был вызван Chrome (пользователем).
Самое похожее, что я нашел, это xwininfo, который дает вам информацию о запущенном окне. Но это не говорит вам, какая программа работает внутри него.
Еще один способ перечислить имя команды и аргументы запущенных процессов:
ps axk pid,comm o comm,args > output.txt
(Перенаправить в файл, чтобы имена / аргументы команды не были усечены.)
[d2 ] Источник: man ps: раздел примеров (с небольшой модификацией).Системный монитор - это графический интерфейс для ps.