Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.os.linux.programowanie > #2228
| Path | csiph.com!newsfeed.xs4all.nl!newsfeed8.news.xs4all.nl!news.uzoreto.com!aioe.org!.POSTED.5iCVG8bNd3ZPhJI6CQ6lxQ.user.gioia.aioe.org!not-for-mail |
|---|---|
| From | "Bogdan (bogdro)" <bogdan@poczta.gazeta.pl> |
| Newsgroups | pl.comp.os.linux.programowanie |
| Subject | Re: waitpid i proces zakończony - nie dziala jak oczekuję |
| Date | Mon, 31 Aug 2020 17:42:36 +0200 |
| Organization | Aioe.org NNTP Server |
| Lines | 80 |
| Message-ID | <rij5pc$4o3$1@gioia.aioe.org> (permalink) |
| References | <ri5gf5$s71$1@dont-email.me> |
| NNTP-Posting-Host | 5iCVG8bNd3ZPhJI6CQ6lxQ.user.gioia.aioe.org |
| Mime-Version | 1.0 |
| Content-Type | text/plain; charset=utf-8 |
| Content-Transfer-Encoding | 8bit |
| X-Complaints-To | abuse@aioe.org |
| User-Agent | Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0 |
| Content-Language | pl |
| X-Notice | Filtered by postfilter v. 0.9.2 |
| Xref | csiph.com pl.comp.os.linux.programowanie:2228 |
Show key headers only | View raw
W dniu 26.08.2020 o 13:18, heby pisze:
> Cześć.
>
> Przyłapałem moją aplikację na takiej sytuacji:
>
> Proces A: zawieszony w funkcji waitpid( numer )
>
> Proces B o numerze "numer": <defunct>
>
> Niepokoi mnie że waitpid służy do oczekiwania na *zmianę* statusu
> procesu potomnego. A ja chce czekać aż proces wyjdzie. nawet jeśli to
> czekanie rozpoczynam jak już wyszedł.
>
> Zaznaczam że gdyby to była prawda (waitpid nie może czekać na
> zakończony proces), to nie widzę rozwiązania bez race condition. Czy
> mam rację podejrzewając że waitpid moze nie zauwazyć procesu który
> jest martwy w momencie wołania? Jak to się poprawnie rozwiązuje?
>
> PS. Dokumentacja mówi jednak że "jesli proces już zmienił stan to
> natychmiast wyjdzie" Hmm... no więc czeka nie wiem na co a proces jest
> po exicie.
>
> PS2. Drugi proces powstał w wyniku forka, ale nie dał rady odpalić
> execv i wyszedł natychmiast za pomoca exit().
Cześć.
Z ciekawości podjąłem temat, bo używam waitpid().
Czy masz jakiś mały fragment kodu, który pokazuje problem? Spróbuj z
flagą WUNTRACED. Bo "u mnie działa" (na szczęście), nawet bez flag
(jądro 5.5.12, glibc 2.29). Proces wchodzi w zombie ("defunct") na
czas sleep(), ale waitpid() nie wisi.
bogdan 3376 1795 0 17:35 pts/1 00:00:00 ./exectest
bogdan 3377 3376 0 17:35 pts/1 00:00:00 [exectest] <defunct>
------------------------
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
pid_t p;
int main(void)
{
pid_t res_pid;
int child_status;
p = fork();
if ( p < 0 ) return 2;
if ( p == 0 )
{
/* potomek */
printf("Potomek\n");
exit(1);
}
else
{
/* rodzic */
printf("Rodzic\n");
sleep(5);
res_pid = waitpid (p, &child_status, 0);
printf("Rodzic 2\n");
}
return 0;
}
------------------------
--
Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS)
Kurs asemblera x86 (DOS, GNU/Linux): http://bogdro.evai.pl
Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32
www.Xiph.org www.TorProject.org Soft(EN): http://bogdro.evai.pl/soft
Back to pl.comp.os.linux.programowanie | Previous | Next — Previous in thread | Next in thread | Find similar
waitpid i proces zakończony - nie dziala jak oczekuję heby <heby@poczta.onet.pl> - 2020-08-26 13:18 +0200
Re: waitpid i proces zakończony - nie dziala jak oczekuję "Bogdan (bogdro)" <bogdan@poczta.gazeta.pl> - 2020-08-31 17:42 +0200
Re: waitpid i proces zakończony - nie dziala jak oczekuję heby <heby@poczta.onet.pl> - 2020-08-31 17:52 +0200
csiph-web