1 / 1 / 0
Регистрация: 07.06.2011
Сообщений: 32
|
||||||
1 | ||||||
Порождение процесса - найти ошибку в коде08.01.2012, 18:54. Показов 1524. Ответов 18
Метки нет (Все метки)
такое задание:
Главный процесс создает дочерний процесс, записывает ему в канал текстовоое сообщение, дочерний процесс распечатывает это сообщение на экран. После этого главный процесс выводит на экран pid дочернего процесса и посылает сигнал SIGALRM дочернему процесссу. После прихода этого сигнала дочерний процесс прекращает свою работу. Помогите найти ошибку, и по возможности как нибудь модифицировать в лучшую сторону
0
|
08.01.2012, 18:54 | |
Ответы с готовыми решениями:
18
Найти ошибку в коде Найти ошибку в коде Найти ошибку в коде Найти ошибку в коде |
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
|
08.01.2012, 19:13 | 2 |
В задании родительский процесс шлёт SIGALRM, а у вас дочерний SIGTRAP...
Каким же образом должен завершаться дочерний процесс? Он так и останется висеть, поедая процессорное время пустым циклом. Слип туда воткни что ли.
0
|
1 / 1 / 0
Регистрация: 07.06.2011
Сообщений: 32
|
|
08.01.2012, 19:19 [ТС] | 3 |
нужно чтобы отец напечатал пид сына по завершению вывода строки, поэтому у меня сын посылает сигнал отцу, а отец на него реагирует по функции hand() выпечатывая pid, и уже после этого посылает сигнал сыну SIGALRM чтобы он завершился
0
|
Gepar
|
08.01.2012, 19:19
#4
|
Не по теме: мало stdio.h и unistd.h подключили вот и не работает
0
|
1 / 1 / 0
Регистрация: 07.06.2011
Сообщений: 32
|
|
08.01.2012, 19:20 [ТС] | 5 |
извиняюсь за такой бардак в инклудах, просто в одном окошке в разное время выполнялись разные задания
0
|
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
|
08.01.2012, 19:21 | 6 |
Показалось, что в обработчике не подача сигнала, а выход. Но от этого не легче, в таком случае, как завершится родительский процесс?
0
|
49 / 49 / 8
Регистрация: 17.07.2011
Сообщений: 380
|
|
08.01.2012, 19:23 | 7 |
f1z1, я сейчас похожим занимаюсь.
а подскажите, пожалуйста, как у вас преподы объясняют что такое в программном коде процесс? где в программе ядро? или же что такое поток в программе(исходя их того, что процесс состоит из нескольких потоков) ? просто у меня остался долг. а препод что ведет в отпуске(( а в интернете не могу найти конкретный ответ. даже вот тему запостил на этом форуме: Создание программы, которая работает по принципам операционной системы
0
|
1 / 1 / 0
Регистрация: 07.06.2011
Сообщений: 32
|
|
08.01.2012, 19:23 [ТС] | 8 |
в задании о завершении ничего не говорится, в конце концов можно поставить wait
проблема в том что пид не печатается, хотя на мой взгляд все правильно
0
|
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
||||||
08.01.2012, 19:31 | 9 | |||||
Или можно перенос в конце формата добавить
0
|
1 / 1 / 0
Регистрация: 07.06.2011
Сообщений: 32
|
|
08.01.2012, 19:34 [ТС] | 10 |
И каким образом это решает проблему? пид не выводится, сын не завершается
0
|
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
||||||
08.01.2012, 19:39 | 11 | |||||
0
|
1 / 1 / 0
Регистрация: 07.06.2011
Сообщений: 32
|
|
08.01.2012, 19:44 [ТС] | 12 |
скажите, у вас с такими исправлениям вывелся пид сына? у меня нет...
0
|
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
|
08.01.2012, 19:49 | 13 |
Вывелся.
0
|
1 / 1 / 0
Регистрация: 07.06.2011
Сообщений: 32
|
|
08.01.2012, 19:51 [ТС] | 14 |
то есть проблема была в этом?
char *str="abcdefg\n";
0
|
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
|
08.01.2012, 19:54 | 15 |
Проблема была в том, что не сбрасывались буферы потоков вывода. С одинаковым успехом решается наличием переноса строки и ручным сбросом через fflush.
0
|
1 / 1 / 0
Регистрация: 07.06.2011
Сообщений: 32
|
||||||
08.01.2012, 20:08 [ТС] | 16 | |||||
То есть сын зацикливался на чтении так как не видел конца?
Добавлено через 3 минуты
0
|
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
|
08.01.2012, 20:16 | 17 |
Нет, просто операции вывода буферизированные, до тех пор пока эти буферы по тем или иным причинам не будут сброшены, на экране ничего не отобразится.
Дескрипторы лучше закрывать, их общее количество — величина конечная, так что держать неиспользуемые не стоит. С другой стороны при завершении работы система сама позаботиться обо их закрытии. Ситуация примерно такая же, как с освобождением динамической памяти.
0
|
1 / 1 / 0
Регистрация: 07.06.2011
Сообщений: 32
|
||||||
08.01.2012, 20:26 [ТС] | 18 | |||||
заметил что если ввести такую поправку то тоже все сработает
0
|
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
|
08.01.2012, 20:33 | 19 |
Как бы после завершения и надо, не? Ты записал в буфер нечто, а потом сбросил его.
0
|
08.01.2012, 20:33 | |
08.01.2012, 20:33 | |
Помогаю со студенческими работами здесь
19
Найти ошибку в коде Найти ошибку в коде Найти ошибку в коде Найти ошибку в коде Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |