The UNIX and Linux Forums  

Go Back   UNIX och Linux Forum > Upp Forum > High Level Programming
.
google unix.com



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

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Sök i denna tråd Rate Thread Visningslägen
  #1 (permalänk)  
Old 01-22-2002
theultimatechuf theultimatechuf is offline
Registered User
  
 

Join Date: Jan 2002
Ort: UK
Inlägg: 6
Angry gaffel () Ing fan!

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.
  #2 (permalänk)  
Old 01-22-2002
Aniruddha aniruddha is offline
Registered User
  
 

Join Date: Jan 2002
Ort: Pune, Indien
Inlägg: 3
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);
)
  #3 (permalänk)  
Old 01-22-2002
theultimatechuf theultimatechuf is offline
Registered User
  
 

Join Date: Jan 2002
Ort: UK
Inlägg: 6
Tack så mycket, ser lovande ut, jag ser fram emot den dagen när jag kan svara på någon annans * NIX programmig fråga. Ser ut som det kommer ta längre tid än med VB.
  #4 (permalänk)  
Old 01-23-2002
bb666 bb666 is offline
Registered User
  
 

Join Date: Jan 2002
Ort: Rumänien
Inlägg: 10
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å.
  #5 (permalänk)  
Old 01-24-2002
theultimatechuf theultimatechuf is offline
Registered User
  
 

Join Date: Jan 2002
Ort: UK
Inlägg: 6
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..
  #6 (permalänk)  
Old 01-25-2002
bb666 bb666 is offline
Registered User
  
 

Join Date: Jan 2002
Ort: Rumänien
Inlägg: 10
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.
  #7 (permalänk)  
Old 01-26-2002
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Ort: Ashburn, Virginia
Inlägg: 9.131
Ni gör detta mycket svårare än det behöver vara. Låt oss börja med forking en bearbeta och lagra sitt PID:
Kod:
#include &lt;stdio.h>
#include &lt;unistd.h>

void main()
{
        int pid, parentpid, childpid;

        parentpid=getpid();
        printf("I am the parent process and my pid is %d\n", getpid());

        if (pid=fork()) {
                childpid=pid;
        } else {
                printf("I am a child process and my pid is %d\n", getpid());
                exit(0);
        }

        printf("I am still the parent process and my pid is %d\n", getpid());
        exit(0);
}

Här barnet processen bara visar sina pid sedan utgångar. Du kommer antagligen att vilja göra mer med dina barn processer, men efter ditt barn att ta hand om verksamhet de måste avsluta så de deltar i någon ytterligare forking. Även i mitt exempel den överordnade processen avslutas ganska snabbt. Detta innebär att init ärver barnet och kommer att skörda den när den dör. Om jag ville behålla den förälder runt, skulle jag behöva för att försäkra att den utfärdar vänta () kräver att varje barn som dör. Om jag inte gjorde det, skulle barnen bli zombies. Jag brukar bara låta föräldern dör.

När vi har en del kod som gör vad vi vill, om vi vill göra det n gånger använder vi ett loop:
Kod:
#include &lt;stdio.h>
#include &lt;unistd.h>

void main()
{
        int n, pid, parentpid, childpids[10];

        parentpid=getpid();
        printf("I am the parent process and my pid is %d\n", getpid());

        for(n=0; n<5; n++) {
                if (pid=fork()) {
                        childpids[n]=pid;
                } else {
                        printf("I am a child process and my pid is %d\n", 
                                        getpid());
                        exit(0);
                }
        }

        printf("I am still the parent process and my pid is %d\n", getpid());
        exit(0);
}

På uppmaning från OP barnens PID registreras i en matris. Men jag fortfarande bara låta föräldern dör.
Closed Thread

Komihåglista

Thread Tools Sök i denna tråd
Sök i denna tråd:

Avancerad sökning
Visningslägen Betygsätt denna tråd
Betygsätt denna tråd:

Utstationering Regler
Du får inte efter nya trådar
Du får inte efter svar
Du får inte skicka bilagor
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG] kod
HTML-koden är Av
Trackback är
Pingbacks är
Refbacks är




Alla tider är GMT -4. Klockan är nu 02:54.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Översättningar Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX och Linux Forum Innehållet upphovsrättsskyddat © 1993-2009. All Rights Reserved.Ad förvaltning RedTyger

Content Relevant webbadresser från vBSEO 3.2.0