![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| High Level Programming Post frågor om C, C + +, Java, SQL och andra programmeringsspråk här. |
Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Senaste Inlägg |
| fan & matematik | ogoy | Shell-programmering och Skript | 5 | 05-26-2008 11:58 |
| helvetet och SQLite | ogoy | Shell-programmering och Skript | 2 | 05-21-2008 01:07 |
| rpm fan! | knmwt15000 | UNIX for Dummies Frågor & Svar | 7 | 03-27-2002 06:06 |
| negativa UID / GID?! Jag kan se dem men vad i helvete menar de? | hellz | UNIX for Dummies Frågor & Svar | 2 | 09-07-2001 04:18 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|
|
||||
|
Hej Jag har allvarliga problem med gaffel kommandot, jag vill i princip att skapa 9 eller 10 barn processer och lagra deras PID nummer i rad medan barnen Stay Resident tills jag döda () dem senare, jag verkar inte gå att kontrollera hur många görs eftersom de alla verkar för att skapa sina egna barn.
Jag har lyckats sluta krascha mitt system, kan någon hjälpa snälla, ingen av mina böcker är all användning. |
|
||||
|
Detta är ett mycket vanligt problem som observerades med gaffel.
Du kan ha vissa flagga variabel som förhindrar att barnet processen till bord igen när den förälder gafflarna. Ett mycket primitivt kod kan somthing like this: -- # include <stdio.h> # include <unistd.h> # include <errno. h> void Main () ( int child1, child2, Val, if_child; char ERR [1000]; if_child \u003d 1; memset (err, '\ 0', strlen (err)); printf ( "\ nParent process-id är% d \ n", getpid ()); child1 \u003d fork (); if (child1 \u003d\u003d -1) ( strcpy (err, strerror (errno)); ) annan ( if (child1> 0) / * Om gaffel kommandot lyckas barnet PID kommer att vara större än noll. * / ( printf ( "\ nDet child1 process-id är% d \ n", child1); if_child \u003d 0; / * Set flaggan här för att förhindra att barn process från forking * / ) ) memset (err, '\ 0', strlen (err)); if (if_child \u003d\u003d 0) ( child2 \u003d fork (); if (child2 \u003d\u003d -1) ( strcpy (err, strerror (errno)); ) printf ( "\ nDet child2 process-id är% d \ n", child2); döda (child2); ) döda (child1); exit (0); ) |
|
||||
|
Jag hade samma problem med en av mina projekt (du kan se den om tråden kallas att "göra en process träd") och locka fler barn processer än väntat Jag var verkligen en otäck problem.
Fortfarande inte listat ut hur det fungerar exakt, men jag hoppas Aniruddha råd kommer att hjälpa mig också. |
|
||||
|
Tack annibuddha (var det så du stava det?) Ser bb666's post Jag trodde att jag skulle publicera det här ...
Jag hade lite problem som jag lagt till fler barn, men beslutade att lagra den förälder id vid start: pid \u003d getpid () än senare jag bara kontrollerat variabel som jag förstår skulle alla barn mot mot getpid () dvs att göra ett barn process stanna och vänta för alltid efter det skapades: if (pid! \u003d getpid ()) // Detta är inte den förälder for (;;) då processer bara sitta där tills de dör (förhoppningsvis) Senast redigerad av theultimatechuf; 01-24-2002 at 06:13.. |
|
||||
|
Japp. Det är ett sätt att göra det eller kan du bara skicka en stoppsignal så att barnet processer inte avfall minnet för ingenting. Just ersätta for (;;)
med kill (getpid (), SIGSTOP). Det är allt bra och dandy men vad händer om du vill att barnet processen att faktiskt göra något? För om du stoppar det eller skicka den i en oändlig loop så kan du inte riktigt arbete inom barnet kan du? Det är faktiskt den del jag är intresserad av: att arbeta inom barnet men hindrar den från forking när föräldern gafflarna igen. |