Другой подход будет похож на
$ for ip in $(pgrep -x evince); do lsof -F +p $ip | grep -oP '^n\K.*\.pdf$'; done
/home/terdon/file1.pdf
/home/terdon/file2.pdf
В общем, всякий раз, когда вы хотите искать процесс, pgrep лучше, чем ps -ef | grep process, поскольку последний также будет соответствовать самому процессу grep. Например:
$ ps -ef | grep emacs
terdon 6647 6424 23 16:26 pts/14 00:00:02 emacs
terdon 6813 6424 0 16:26 pts/14 00:00:00 grep --color emacs
$ pgrep emacs
6647
Параметр -x возвращает только процессы, чье имя совпадает с переданной строкой. Это необходимо, потому что evince также запускает демон (evinced), который также будет сопоставляться без -x (-l должен печатать имя, а также PID):
$ pgrep -l evince
4606 evince
4611 evinced
4613 evince
$ pgrep -lx evince
4606 evince
4613 evince
] Таким образом, цикл for будет запускать lsof на каждом из PID, возвращаемых pgrep. Затем они проходят через grep. Опция -o означает «распечатать только согласованную часть строки», а -P активирует регулярные выражения, совместимые с Perl, что позволяет нам использовать \K. В PCREs \K означает «отбросить все, что было согласовано до \K ". In other words, since I am using -o , it will match lines beginning with n and ending with .pdf but it will not print the matched n`. В результате печатается только имя файла.
У меня есть подозрение, что ваш компьютер засыпает и теряет сеть после пробуждения. Это обычная «ошибка» в 16.04 и может быть решена многими способами. Я покажу вам один:
Откройте терминал, нажав Ctrl + Alt + T.
Теперь введите следующие команды:
sudo cp /lib/systemd/system-sleep/hdparm /lib/systemd/system-sleep/reset-network
sudo chmod 755 /lib/systemd/system-sleep/reset-network
sudo nano /lib/systemd/system-sleep/reset-network
Отредактируйте файл чтобы выглядеть так:
#!/bin/sh
case "$1" in
post)
exec /bin/systemctl restart network-manager
;;
esac
Ваш менеджер сети автоматически перезапустится после сна.