Похож на него, принимает это [:space:]
только появится в рамках выражения скобки (выделенные соответствия с *):
echo 'hello' | grep -E '^[:space:]*h'
*h*ello
echo 'hello' | grep -E '[^[:space:]]*h'
*h*ello
echo ' hello' | grep -E '^[[:space:]]*h'
* h*ello
Это объяснено следующим отрывком от man grep
(мое выделение):
Наконец, определенные именованные классы символов предопределены в рамках выражений скобки [...] Примечание, что скобки в этих именах классов являются частью символьных имен и должны быть включены в дополнение к скобкам, разграничивающим выражение скобки.
Да, это. Во-первых, создайте канал: mkfifo /tmp/fifo
. Используйте gdb для присоединения к процессу: gdb -p PID
Затем близкий stdin: call close (0)
; и откройте его снова: call open ("/tmp/fifo", 0600)
Наконец, пошлите запрос (от другого терминала, поскольку gdb, вероятно, зависнет):
echo blah > /tmp/fifo
Я совершенно уверен, что Вы не можете.
Проверьте использование ps x
. Если процесс имеет a ?
как управляющий tty, Вы не можете отправить вход в него больше.
9942 ? S 0:00 tail -F /var/log/messages
9947 pts/1 S 0:00 tail -F /var/log/messages
В этом примере можно отправить вход в 9947
выполнение чего-то как echo "test" > /dev/pts/1
. Другой процесс (9942
) не достижимо.
В следующий раз Вы могли использовать экран или tmux для предотвращения этой ситуации.
root
Вы могли даже сделать это к процессам другого пользователя.
– dmckee --- ex-moderator kitten
16.02.2012, 23:30
echo "test" > /dev/pts/1
не отправит вход для обработки 9947
- это произведет слово "тест" на терминале того процесса.
– psmears
21.11.2014, 00:59
РЕДАКТИРОВАНИЕ: Поскольку Stephane Gimenez сказал, дело не в этом простой. Это только позволяет Вам печатать к другому терминалу.
Можно попытаться записать в этот процесс с помощью/proc. Это должно быть расположено в/proc/pid/fd/0, таким образом, простое:
echo "hello" > /proc/PID/fd/0
должен сделать это. Я не попробовал его, но это должно работать, пока этот процесс все еще имеет допустимый stdin дескриптор файла. Можно проверить его с ls -l
на/proc/pid/fd/.
Дополнительную информацию см. в nohup о том, как поддерживать процессы в рабочем состоянии.
echo
луг что-то к оконечному устройству просто распечатает то, что Вы записали на терминале, он не будет передан к процессу.
– Stéphane Gimenez
16.02.2012, 18:16
Только закончив командную строку &
не полностью отсоединит процесс, он просто выполнит его в фоновом режиме. (С zsh
можно использовать &!
для фактического отсоединения это, иначе который Вы имеете, делает disown
это позже).
Когда процесс будет работать в фоновом режиме, он не будет получать вход от своего терминала управления больше. Но можно передать его обратно в передний план с fg
и затем это считает вход снова.
Иначе не возможно внешне изменить свой filedescriptors (включая stdin) или повторно прикрепить потерянный терминал управления …, если Вы не используете средства отладки (см. ответ Ansgar или взгляните на retty
команда).
>>/dev/stderr
, иначе, когда я закрываю терминал, "отрицаемый" процесс закончится также.. Я никогда действительно понял этот tho..
– Aquarius Power
20.11.2015, 07:08
Когда исходный терминал больше не доступен ...
reptyr
может быть тем, что вам нужно, см. https://serverfault.com/a/284795/187998
Цитата оттуда:
Взгляните на reptyr , который делает именно это. На странице github есть вся информация.reptyr - инструмент для "перепрограммирования" программ.
reptyr - это утилита, которая берет существующую запущенную программу и прикрепляет ее к новому терминалу. Запустил длительный процесс по ssh, но должен выйти и не хочет его прерывать? Просто запустите экран, используйте reptyr, чтобы захватить его, а затем завершите сеанс ssh и отправляйтесь домой.
ИСПОЛЬЗОВАНИЕ
reptyr PID
"reptyr PID" захватит процесс с идентификатором PID и присоединит его к вашему текущему терминалу.
После присоединения процесс будет принимать входные данные и записывать выходные данные в новый терминал , включая ^ C и ^ Z. (К сожалению, если вы сделаете фоновый рисунок, вам все равно придется запускать "bg" или "fg" в старом терминале. Это , вероятно, невозможно исправить разумным способом без установки исправлений ваша оболочка .)
Edit утверждает, что « reptyr
не может захватить процесс, который имеет подпроцессы. Или подпроцесс (reptyr версии 0.6.2)». Ограниченная поддержка существует Проблема , Проблема
touch /tmp/thefile
. Stdout равняется 1, таким образом,call close (1)
; также, используйте корректные полномочия для записи:call open ("/tmp/thefile", 0400)
.echo…
конечно, не нужно. – Ansgar Esztermann 26.08.2014, 14:25