Это может быть устаревший вопрос, но, если у кого-то возникла аналогичная проблема, я бы рекомендовал проверить сообщения об ошибках Xid на веб-сайте Nvidia, по этой ссылке
Например, вы можете видеть, что ошибки № 13 и 31 связаны с пользовательским приложением. Это может быть используемое вами программное обеспечение, которое неправильно обрабатывает использование или доступ к памяти.
Команда ps
имеет два поля, которые, как правило, ищут таким образом: args
и comm
. Первая — это строка аргумента программы, разделенная NUL -. Второе — это «имя» для программы. Они хранятся отдельно, и (в различных операционных системах )могут обе изменяться самой программой во время выполнения. Такие программы, как tmux
, действительно делают это.
Результатом ps
является не поддающийся машинному анализу . Несколько полей могут содержать незакодированные пробелы , что делает невозможным надежное определение границ полей, поскольку пробел произвольной длины является также разделителем полей. args
и comm
действительно являются двумя такими полями. Вывод ps
читается только человеком.
Когда вы grep
выводите ps
, вы, таким образом, сопоставляете целые строки с шаблоном, не имея надежного способа привязать этот шаблон к конкретному соответствующему полю, за исключением путем устранения почти всего остального, что бесполезна, и что вы, возможно, пытаетесь найти этим методом в первую очередь.
Для примера:
u
для Linux ps
(, которая -u
в BSD ps
), есть поле user
, содержащее имена пользователей, которые grep
шаблоны поиска имен программ также будут совпадать. по случаю. grep
, соответствует собственному args
процесса grep
. _
переменной среды.% ps -a -x -e -o sid,comm,args | grep dbus-daemon | head -n 4 25 nosh cyclog dbus-daemon/ (nosh) 25 dbus-daemon dbus-daemon --config-file./system-wide.conf --nofork --address=unix:path=/run/dbus/system_bus_socket 989 dbus-daemon dbus-daemon --config-file./per-user.conf --nofork --address=unix:path=/run/user/JdeBP/bus 15107 grep grep dbus-daemon % % clearenv --keep-path \ setenv WIBBLE tmux \ ps -a -x -e -o sid,comm,command | grep tmux 15107 ps PATH=/usr/local/bin:/usr/bin:/bin WIBBLE=tmux ps -a -x -e -o sid,pid,comm,command %
Иными словами,:grep
предназначен для работы с текстовыми файлами, состоящими из строк. Таблица процессов не является текстовым файлом, и обработка ее как текстового файла (путем перевода с помощью команды ps
)приводит к потере информации о полях.
Такой поиск можно выполнить, просматривая таблицу процессов не с помощью ps
. В Linux можно напрямую просмотреть /proc/${PID}/comm
и аналогичные псевдофайлы -для строк аргументов, строк окружения и так далее.
Или можно написать инструмент, который извлекает конкретные данные для сопоставления из таблицы процессов и запускает обработку шаблонов только для этого поля. Этот инструмент предназначен не для текстовых файлов, а для таблиц процессов. Можно назвать это pgrep
.
Конечно, на сжимающей руке можно было бы написать ps
, чей вывод можно обработать с помощью (, скажем, )awk
, потому что он является машиночитаемым, кодирующим пробел с vis()
и, таким образом, предоставляя поля, которые awk
может правильно распознать. Недостатком является то, что тогда он становится менее человеческим-читаемым и не совсем таким, каким должен быть конформант ps
. Я передаю его вывод через console-flat-table-viewer
, чтобы прочитать его. & #9786;
% system-control ps -p 740 -o sid,comm,args SID COMMAND COMMAND 25 dbus-daemon dbus-daemon\040--config-file\040./system-wide.conf\040--nofork\040'--address=unix:path=/run/dbus/system_bus_socket' % % system-control ps -A -o sid,comm,args,envs,tree | awk '{ if ("dbus-daemon"==$2) print $3; }' dbus-daemon\040--config-file\040./system-wide.conf\040--nofork\040'--address=unix:path=/run/dbus/system_bus_socket' dbus-daemon\040--config-file\040./per-user.conf\040--nofork\040'--address=unix:path=/run/user/JdeBP/bus' /usr/local/bin/dbus-daemon\040--fork\040--print-pid\0405\040--print-address\0407\040--session % % system-control ps -A -o sid,comm,args,envs,tree | awk '{ if ("dbus-daemon"==$2) print $3; }' | unvis dbus-daemon --config-file./system-wide.conf --nofork '--address=unix:path=/run/dbus/system_bus_socket' dbus-daemon --config-file./per-user.conf --nofork '--address=unix:path=/run/user/JdeBP/bus' /usr/local/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session %
ps
. Руководство по основным командам NetBSD . 2016 -12 -02. vis
. Руководство по функциям библиотеки NetBSD . 2017 -04 -22. clearenv
. Направляющая ноша . Программное обеспечение. setenv
.Направляющая ноша . Программное обеспечение. ps
. Направляющая ноша . Программное обеспечение. list-process-table
. Направляющая ноша . Программное обеспечение.