Re: Амперснад в bash
On Wed, 20 Jan 2016, Dmitry Derjavin wrote: Пн, 18 янв 2016, 21:50, walter: на деле же вывод процесса не скрывается. управление терминалом возвращается, но вывод запущенной команды продолжает сыпаться в терминал. Насколько я понимаю, дело в том, что фоновый процесс имеет право игнорировать SIGTTOU, который он получает каждый раз, когда пытается вывести что-то на стандартный вывод, находясь в фоне. Оправдано такое поведение или нет в каждом конкретном случае — вопрос спорный. Но определённо это фича а не баг. Причём, фича очень древняя. ;) Проблема еще и в том, что в зависимости от настроек терминала сигнал SIGTTOU может посылаться или нет: http://curiousthing.org/sigttin-sigttou-deep-dive-linux Мне кажется, что это все проистекает из вопросов типа: кому надо и кому не надо посылать SIGTTOU в pipe comand1 | comand2 & И не надо забывать о stderr. Ю.
Re: Амперснад в bash
Ср, 20 янв 2016, 12:25, yuri nefedov: > Проблема еще и в том, что в зависимости от настроек терминала > сигнал SIGTTOU может посылаться или нет: > http://curiousthing.org/sigttin-sigttou-deep-dive-linux Спасибо, очень интересно! -- ~dd
Re: Амперснад в bash
Пн, 18 янв 2016, 21:50, walter: > на деле же вывод процесса не скрывается. управление терминалом > возвращается, но вывод запущенной команды продолжает сыпаться в > терминал. Насколько я понимаю, дело в том, что фоновый процесс имеет право игнорировать SIGTTOU, который он получает каждый раз, когда пытается вывести что-то на стандартный вывод, находясь в фоне. Оправдано такое поведение или нет в каждом конкретном случае — вопрос спорный. Но определённо это фича а не баг. Причём, фича очень древняя. ;) Путаница возникла из-за слова «hidden», которое относилось к собственно процессу, а не к его выводу. Имелось в виду, что мы не можем, например, послать сигнал процессу, нажав Ctrl-C или Ctrl-\. -- ~dd
Амперснад в bash
Столкнулся со странным поведением bash: В Debian Handbook (последнем) пишут: "The command interpreter can also run programs in the background if the command is followed by a “”. By using the ampersand, the user resumes control of the shell immediately even though the command is still running (hidden from the user; as a background process)." на деле же вывод процесса не скрывается. управление терминалом возвращается, но вывод запущенной команды продолжает сыпаться в терминал. где-то на форуме альтовском читал, что раньше & действительно работал правильно (как и пишут в хендбуке). это баг такой или новая фича?) -- walter_322
Re: Амперснад в bash
On Mon, Jan 18, 2016 at 09:50:34PM +0300, walter_322 wrote: > Столкнулся со странным поведением bash: > > на деле же вывод процесса не скрывается. управление терминалом > возвращается, но вывод запущенной команды продолжает сыпаться в > терминал. > > это баг такой или новая фича?) Так должно быть. Отсоединить процесс от терминала можно так nohup proc& > -- > walter_322>
Re: Амперснад в bash
On Mon, 18 Jan 2016 21:50:34 +0300 walter_322wrote: > Столкнулся со странным поведением bash: > > В Debian Handbook (последнем) пишут: > "The command interpreter can also run programs in the background if the > command is followed by a “”. By using the ampersand, the user resumes > control of the shell immediately even though the command is still running > (hidden from the user; as a background process)." > > на деле же вывод процесса не скрывается. управление терминалом возвращается, > но вывод запущенной команды продолжает сыпаться в терминал. Это последствия неправильного прочтения мутной формулировки (про "hidden from the user"). Всегда сыпалось и будет сыпаться. > где-то на форуме альтовском читал, что раньше & действительно работал > правильно (как и пишут в хендбуке). http://www.anekdot.ru/id/-22619007/ > это баг такой или новая фича?) Это наименее затратное поведение. Заводить на каждый процесс по тройке пайпов было бы накладно, а обрабатывать их все в командном интерпретаторе - ещё и сложно. К тому же, не совсем ясно, куда же девать вывод от такого «спрятанного» процесса. -- Alexander Galanin
Re: Амперснад в bash
On 2016-01-18, Иван Лох wrote: >> на деле же вывод процесса не скрывается. управление терминалом >> возвращается, но вывод запущенной команды продолжает сыпаться в >> терминал. > > Отсоединить процесс от терминала можно так > nohup proc& Дополню из nohup(1): If standard input is a terminal, redirect it from /dev/null. If standard output is a terminal, append output to 'nohup.out' if possible, '$HOME/nohup.out' otherwise. If standard error is a terminal, redirect it to standard output. To save output to FILE, use 'nohup COMMAND > FILE'. Далее сделаю предположение что дескрипторы stdin, stdout, stderr копируются между приложениями с вызовом execve(2): By default, file descriptors remain open across an execve(). И потому выставляются в зависимости от того что сконструировал getty / sshd (снова предположение). Единственное не ясно как libc / ld.so / kernel связывает сохраненные дескрипторы с stdin/stdout... Я видел такой код для изменения stdin: int new_stdin = open("/path/to/file, O_RDONLY); pid_t fk = fork(); if (!fk) { // in the child dup2(new_stdin, 0); close(new_stdin); execl("program_name", "program_name", NULL); exit(127); } else if (fk < 0) { // in parent with error from fork } else { // in parent with no error so fk = pid of child } close(new_stdin); // we don't need this anymore Или список дескрипторов - просто копируется execl + stdin/stdout/stderr имеют предопределенные номера, потому понятно где их искать? -- http://defun.work/
Re: Амперснад в bash
18.01.2016 21:55, Иван Лох пишет: > On Mon, Jan 18, 2016 at 09:50:34PM +0300, walter_322 wrote: >> Столкнулся со странным поведением bash: >> >> на деле же вывод процесса не скрывается. управление терминалом >> возвращается, но вывод запущенной команды продолжает сыпаться в >> терминал. >> > >> это баг такой или новая фича?) > Так должно быть. > > Отсоединить процесс от терминала можно так > nohup proc& А чтоб оно ещё и nohup.out не создавало и не засирало - nohup cmd >/dev/null 2&1 & А если к этому процессу потом обратно подключиться и порулить хочется - screen -d -m cmd -- Best regards, Mikhail - WWW: http://www.antmix.ru/ XMPP: ant...@stopicq.ru signature.asc Description: OpenPGP digital signature