Доступ к /proc/PID/fd/0
не приводит к доступу к файловому дескриптору 0 процесса PID , он обращается к файлу, который PID открыл в файловом дескрипторе 0. Это тонкое различие, но это имеет значение. Файловый дескриптор — это соединение процесса с файлом. Запись в дескриптор файла записывается в файл независимо от того, как файл был открыт.
Если /proc/PID/fd/0
является обычным файлом, запись в него изменяет файл. Данные не обязательно являются тем, что процесс будет читать дальше :, они зависят от позиции, прикрепленной к файловому дескриптору, которую процесс использует для чтения файла. Когда процесс открывается /proc/PID/fd/0
, он получает тот же файл, что и другой процесс, но позиции файлов не зависят друг от друга.
Если /proc/PID/fd/0
является каналом, то запись в него добавляет данные в буфер канала. В этом случае процесс, читающий из канала, будет считывать данные.
Если /proc/PID/fd/0
является терминалом, то запись в него выводит данные на терминал. Файл терминала двунаправленный :запись в него выводит данные, т.е. терминал отображает текст; чтение с терминала вводит данные, то есть терминал передает пользовательский ввод.
Python выполняет как чтение, так и запись в терминал. Когда вы запускаете echo 'print "Hello"' > /proc/$(pidof python)/fd/0
, вы записываете print "Hello"
на терминал. Терминал отображает print "Hello"
в соответствии с инструкциями. Процесс python ничего не видит, он все еще ждет ввода.
Если вы хотите передать входные данные процессу Python, вы должны заставить терминал сделать это. См. ответ crasic , чтобы узнать, как это сделать.
Это не сработает, если вы сохраните файлы cookie на стороне клиента -с помощью JavaScript в своем HTML-коде. Wget и curl не интерпретируют код JavaScript, они просто возвращают ответ, отправленный сервером.
Вам необходимо установить файлы cookie на стороне сервера -, например, с помощью setcookie в PHP. Таким образом, файлы cookie отправляются в заголовке HTTP-ответа Set -Cookie и могут быть сохранены с помощью wget/curl.
Заголовок ответа (, выводимый из wget
с использованием опции -S
/ --server-response
)с куки, выглядит следующим образом:
HTTP/1.1 200 OK
Date: Fri, 01 Nov 2019 00:33:05 GMT
Server: Apache/2.4.25 (Debian)
Set-Cookie: testcookie=myvalue; expires=Fri, 01-Nov-2019 01:33:05 GMT; Max-Age=3600
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
Файл cookie был установлен на странице PHP с помощью:
<?php setcookie("testcookie", "myvalue", time()+3600); ?>