2013-02-17 4 views
1

Я пытаюсь раскошелиться интерактивный Баш от Баш скрипт так:ветвление интерактивный Баш от Баш скрипт

#!/bin/bash 
bash -c 'bash -i -l' & 

После запуска процесса выше сценария «Баш -i -l» попадает 100% загрузки процессора. В чем причина такого поведения?

Я проверяю это на Fedora 16.

Спасибо.

+0

Я не знаю, но какова цель '' bash -c'? –

ответ

2

Интересный вопрос. Обратите внимание, что это эквивалентно запуску:

bash -c "bash -c 'bash -i -l' &"

в командной строке. Я получил тот же результат просто работает:

bash -c "bash -i &"

Довольно уверен, Что происходит это Bash опрашивает пытается получить доступ к терминалу управления (потому что его пытается быть интерактивным), но его не допускается (becuase его фоновый процесс). Я попробовал запустить bash -c 'strace -o bash_trace.txt bash -i &'. Его делает это в цикле:

... 
    rt_sigaction(SIGTTIN, {SIG_DFL, [], 0}, {SIG_IGN, [], 0}, 8) = 0 
kill(0, SIGTTIN)      = 0 
--- SIGTTIN (Stopped (tty input)) @ 0 (0) --- 
rt_sigaction(SIGTTIN, {SIG_IGN, [], 0}, {SIG_DFL, [], 0}, 8) = 0 
ioctl(255, TIOCGPGRP, [9964])   = 0 
rt_sigaction(SIGTTIN, {SIG_DFL, [], 0}, {SIG_IGN, [], 0}, 8) = 0 
kill(0, SIGTTIN)      = 0 
--- SIGTTIN (Stopped (tty input)) @ 0 (0) --- 
rt_sigaction(SIGTTIN, {SIG_IGN, [], 0}, {SIG_DFL, [], 0}, 8) = 0 
ioctl(255, TIOCGPGRP, [9964])   = 0 
rt_sigaction(SIGTTIN, {SIG_DFL, [], 0}, {SIG_IGN, [], 0}, 8) = 0 
kill(0, SIGTTIN)      = 0 
--- SIGTTIN (Stopped (tty input)) @ 0 (0) --- 
... 

процессы получают SIGTTIN, когда они пытаются получить доступ к управляющему терминалу, но они в фоновом режиме - http://www.lindevdoc.org/wiki/SIGTTIN. Я не знаю, подходит ли правильное поведение, подобное этому.

+0

Благодарим вас за отзыв, это хороший результат. – user855433

+0

Благодарим вас за отзыв, это хороший результат. Исходной проблемой, которую я пытаюсь отслеживать, является следующее: в одном java-потоке exec "bash -c 'bash -i -l' 2> & 1", и он отлично работает. Если я выполняю один и тот же exec во втором потоке java при первом запуске, я получил высокую загрузку процессора и никакого ответа от второго bash. Я представлю регистрацию, чтобы вы указали, что это тот же случай, что и выше. Еще раз спасибо. – user855433

Смежные вопросы