Задать вопрос

Как zsh организовывает обработку такой команды: «cat &»?

Я пишу shell, но не могу понять как организовать обработку cat &.
Что за фоновый процесс и из-за чего возбуждаеться сигнал SIGTTOU.
"SIGTTOU — сигнал, посылаемый фоновой задаче при попытке вывода на управляющий терминал"
У zsh вот такое выводит, но у меня вообще нет идей как он обрабатывает.
> cat &
[2] 10810
[2]  + suspended (tty input)  cat

Может у кого-нибудь есть про это материал или знает как это организовать?
В обычном случае у меня так:
if ((pid = fork()) == 0)
{
	ft_42sh_signal_default();//Востановим сигналы
	tcsetattr(STDIN_FILENO, TCSANOW, &array->tty);//Установим каонический режим
	execve(lp_arg[0], lp_arg, env_spl);//Запускаем
}
else
      wait//ждем
  • Вопрос задан
  • 182 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 1
hapr-lera
@hapr-lera Автор вопроса
Оболочки делают это через создание групп процессов setpgid.
А потом если это "cat" то выводят на передний план tcsetattr и ждут wait. Если "cat &" то так и оставляют в фоне.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
gbg
@gbg
Любые ответы на любые вопросы
Это личное дело терминала. При запуске процесса терминал подсовывает ему свои дескрипторы in, out, err.
Когда вы запускаете процесс на фоне, терминал не цепляет эти потоки к экрану и клавиатуре, вот и все.

То есть, это не какой-то системный вызов, а реализация определенной стратегии работы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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