запуск программы из bash приводит к переходу bash в новое приглашение

Когда я запускаю программу из консоли, например,

me@box:~$ firefox

Я ожидаю, что консоль будет регистрировать сообщения об ошибках (я думаю, это std out или std err?) И другие элементы программы, в данном случае firefox.

Но сегодня я замечаю, что bash просто открывает программу и переходит к новому приглашению, например,

me@box:~$ firefox
me@box:~$

Как запустить программу из bash, чтобы сообщения об ошибках записывались на консоль?

Почему некоторые программы работают по умолчанию, а другие (firefox) - нет?

3
задан 6 June 2012 в 07:22

1 ответ

Вы правы, что это результат уже запущенного процесса, но если в Firefox нет ошибки, он не должен быть результатом процесса зомби .

Когда вы запускаете Firefox, самый новый экземпляр Firefox проверяет, запущен ли уже Firefox. Если Firefox уже запущен, то вместо продолжения в качестве отдельного экземпляра самый новый экземпляр связывается с уже запущенным экземпляром и заставляет его открыть новое окно или новую вкладку. Если URL-адрес был указан в качестве аргумента командной строки для самого нового экземпляра Firefox, он передает этот URL-адрес уже запущенному экземпляру, поэтому в уже запущенном экземпляре открывается окно или вкладка, открывая страницу с URL-адресом. Вы указали. Как только этот очень новый второй экземпляр сказал исходному уже запущенному экземпляру, что делать, этот очень новый экземпляр завершается, оставляя только один экземпляр.

Вы можете проверить это поведение, запустив первый экземпляр Firefox с URL-адресом в качестве аргумента командной строки (например, firefox http://askubuntu.com/q/147059/22949), а затем сделав новое окно / вкладку, снова выполнив команду firefox с другим URL (например, Firefox http://www.google.com). Изучив запущенные процессы с помощью ps x, вы увидите, что единственный запущенный экземпляр firefox имеет первый URL-адрес в качестве аргумента командной строки (поскольку вторая команда больше не выполняется).

Часто говорят, что вы не можете запускать более одного экземпляра Firefox одновременно. Точнее сказать, что вы не можете запускать более одного экземпляра Firefox одновременно, более чем за долю секунды.

Из-за этого поведения, когда вы вызываете второй экземпляр Firefox изнутри оболочки, этот экземпляр завершается почти сразу, давая вам еще одно приглашение оболочки, как и любая программа, которая завершила выполнение.

Другая широко используемая программа в Ubuntu, которая делает это, - Nautilus (файловый браузер).

Возможно, Firefox запущен, но окна не показаны, хотя обычно это может произойти только в течение короткого времени после выхода из всех окон Firefox, если только нет ошибки. Возможно, именно это происходило, когда вы запускали firefox в Терминале.

Однако, если Firefox был завершен, но еще не был удален из таблицы процессов (что означает «процесс зомби / несуществующий процесс», и что я предполагаю, что вы подразумеваете под «процессом-призраком»), очень Новый экземпляр Firefox должен быть в состоянии распознать это и действовать так, как будто это единственный запущенный экземпляр Firefox (потому что это так). Если вы обнаружите, что этого не происходит, то вы должны сообщить об этом поведении как об ошибке в пакете firefox в Ubuntu (или против Firefox, если вы используете исходный дистрибутив Firefox, а не версию из официальные пакеты Ubuntu).

Я не знаю, сколько усилий вы готовы приложить, чтобы выяснить, что происходит, но сбой оконного менеджера (compiz) не должен вызывать скрытие окна Firefox при условии, что compiz на самом деле снова запущен. Если это произойдет, это ошибка в compiz или firefox.

Если вы можете предоставить вывод ps x | grep -v grep | grep firefox во время возникновения проблемы - т.е., обнаружив, что выполнение firefox в Терминале немедленно вернет вас в вашу оболочку - это очень поможет в устранении неполадок , Вы можете редактировать свой ответ, чтобы включить эту информацию. Вы также должны уточнить, открывается ли новое окно / вкладка Firefox, когда вы запускаете firefox в Терминале, или если его запуск в Терминале не имеет никакого эффекта.

0
ответ дан 6 June 2012 в 07:22

Другие вопросы по тегам:

Похожие вопросы: