t3st3r
написал 31 июля 2006 года в 19:03 (1068 просмотров)
Ведет себя
неопределенно; открыл 11 тем в форуме, оставил 14 комментариев на сайте.
Извините что такие вопросы, тупые, когда разбираюсь с ними, то понимаю, какой я тупой :)), но вот никак не пойму как работают эти функции, делал прогу, с fork(), и проверка если (child_pid != 0) значит родительский процесс, если нет, значит порождаемый, так вот ингода пишет, что я нахожусь токо в род-ом процессе, перезапускаю прогу пишет, что в род-ом, а потом видимо заходит в порождаемый и выходит, получается, что я не могу точно узнать попаду я в порождаемый процесс?
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
Нихрена не понял.
Соберись с мыслями и напиши связный текст. С текстом тестовой программы, ее выводом, из которого будет ясна твоя проблема.
код:
#include …
…
int spawn() {
pid_t child_pid;
child_pid = fork();
if(child_pid != 0) {
return child_pid;
}
else {
execvp(prog, *var_list);
fprintf(stderr, «an error…\n»);
}
int main(void) {
char *list[] = {«ls», «-l», «/», NULL};
spawn(«ls», list);
printf(«Done with main process»);
return 0;
}
Так вот, ингода запускаю пишется просто Done with main process (т.е. я так понимаю я не попал в порождаемый процесс?), а иногда выводит какую-то инфу типа:
Exception: STATUS_ACCESS_VIOLATION
далее значения в регистрах.
Я ВОБЩЕ НЕ ПОНИМАЮ СМЫСЛА В ЭТОМ, ПЛИЗ ОБЪЯСНИТЕ
ну, это сложно считать законченным кодом, ибо он не будет компилироваться. И даже не из-за отсутствия инклюдов (их я бы смог приписать). По другим причинам — странный заголовок функции spawn, странная структура (количество { не равно количеству })… вот рабочий пример:
Был признателен, если бы были комменты, я очень плохо в это врубился, соррии…
мне было бы их несложно вписать, и я бы их вписал, если бы я понимал что там надо комментировать. ;)
тут используется всего пять функций: printf, perror, fork, execvp и waitpid. Все они описаны в man’ах. В чём проблема? Читай мануалы и медитируй над ними и примером — лучший способ воткнуть. :)
Я так понял что если после fork pid равен 0, то мы в порожденном процессе?
И я еще читал, что в execvp первый аргумент это название запускаемой проги, а второй это опции этой проги с последним элементом NULL, но так как во все проги 0 элементом идет название проги, то и во втором аргументе execvp нулевым элементом в массиве тоже должно быть назваине проги, именно поэтому в моем коде нулевым эл. был ls
и еще небольшой вопрос что это за тип size_t?
grep -r size_t /usr/include
?
Целочисленный тип, который используется при работе с памятью.
t3st3r, может пора почитать таки man’ы?
Я же не заставляю отвечать, просто если у меня появляется вопрос я спрашиваю, про тот же форк я читал, делал пример но непонял как он работает, про size_t его я не нашел в манах, вот и спросил, так что не надо флеймить
to Feuerbach СПАСИБО за ответы, но про форк ответа не получил :(
Цитата из fork(2):
Цитата из exec(3)
Ты до сих пор считаешь, что тебя несправедливо отослали к man?