Я создаю свою собственную оболочку на языке Си.До сих пор я реализовал много функций, но у меня возникли проблемы с обработкой CTRL-Z (SIGTSTP).Позвольте мне указать проблему для успешных попыток:
Когда я выполняю программу в своей оболочке (например, gedit), а затем нажимаю Ctrl-Z, она выполняет kill (p_id, SIGTSTP) и останавливаетсяэтот процесс.Оболочка также добавляет идентификатор процесса в массив background_processes, чтобы мы могли достичь его в дальнейшем.Затем, если я введу «fg» в своей оболочке, он выведет процесс на передний план и выполнит kill (p_id, SIGCONT), чтобы мы могли продолжать использовать программу.Также оболочка ожидает завершения процесса, выполняя функцию waitpid.Мы закрываем программу, нажав кнопку X или нажав Ctrl-C.Точно то же самое в оболочке Linux.SUCCESFULL !!!
Если я выполняю программу в своей оболочке (например, gedit) в фоновом режиме, указав & (амперсанд), он автоматически запускает этот процесс в фоновом режиме, не ожидая его.Но он добавляет идентификатор процесса в массив background_processes, чтобы мы могли достичь его в дальнейшем.Затем, когда я набираю «fg» в своей оболочке, это выводит процесс на первый план.Фактически он ожидает завершения процесса, выполняя функцию waitpid.Также не имеет значения, если в фоновом режиме будет более одного процесса, они будут выводиться на первый план один за другим.Мы закрываем программы, нажимая кнопку X или нажимая Ctrl-C.Точно то же самое в оболочке Linux.SUCCESFULL !!!
Позволяет выполнить процесс на переднем плане, а затем отправить его в фоновый режим с помощью Ctrl-Z и выполнить процесс в фоновом режиме.У нас есть 2 процесса в фоновом режиме.Если я наберу "fg", это выведет первый фоновый процесс на передний план и ждет его.Если я нажимаю кнопку X (кнопка закрытия), которая закрывает программу, оболочка выводит второй процесс на передний план и ждет его.Идем очень хорошо, вот что мы хотим.Таким образом, этот сценарий также работал очень хорошо.
Сценарий проблемы такой же, как и предыдущий сценарий при создании процессов.Когда я набираю «fg», он выводит первый фоновый процесс на передний план и ждет его.Но затем, если я нажимаю Ctrl-C, он закрывает оба процесса !!!!!!Он должен был только закрыть первый процесс и должен был ждать второго процесса !!!
Я искал везде, пробовал все, но не мог понять.Но проблема выглядит как со строкой 525. Когда я посылаю сигнал SIGCONT, он закрывает процесс.Но если прокомментировать эту строку, она не закрывается, но я также не могу использовать процесс, поскольку он остановлен !!!
У меня есть код в моем репозитории GitHub здесь: https://github.com/EmreKumas/Myshell
Спасибо за чтение ...