The UNIX and Linux Forums  

Go Back   UNIX og Linux Forums > Top Forums > Højtstående Programmering
.
google unix.com



Højtstående Programmering Post spørgsmål om C, C + +, Java, SQL, og andre programmerings sprog her.

Mere UNIX og Linux Forum Emner du måske kan finde Helpful
Tråd Thread Starter Forum Svar Last Post
helvede & matematik ogoy Shell Programmering og Scripting 5 05-26-2008 11:58 PM
helvede og SQLite ogoy Shell Programmering og Scripting 2 05-21-2008 01:07 AM
rpm helvede! knmwt15000 UNIX for dummyer Spørgsmål & svar 7 03-27-2002 06:06 AM
negative UID / GID?! Jeg kan se 'em men hvad fanden gør betyder de?! hellz UNIX for dummyer Spørgsmål & svar 2 09-07-2001 04:18 PM

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øg denne tråd Rate Thread Display Modes
  #1 (permalink)  
Old 01-22-2002
theultimatechuf theultimatechuf is offline
Registreret Bruger
  
 

Join Date: Jan 2002
Beliggenhed: UK
Stillinger: 6
Angry fork () Ing helvede!

Hej Jeg har alvorlige problemer med gaffel kommandoen, jeg dybest set ønsker at oprette 9 eller 10 børn processer og gemme deres PID numre i matrix, mens børnene ophold bopæl, indtil jeg dræbe () dem senere, jeg kan ikke ud til at styre, hvor mange der er lavet som de alle synes at skabe deres egne børn.

Jeg har formået at stoppe bryder mit system, kan nogen hjælpe husk, at ingen af mine bøger er enhver brug.
  #2 (permalink)  
Old 01-22-2002
Aniruddha aniruddha is offline
Registreret Bruger
  
 

Join Date: Jan 2002
Beliggenhed: Pune, Indien
Stillinger: 3
Dette er et meget almindeligt problem set med en gaffel.
Du kan have nogle flag variabel, der vil forhindre, at barnet proces til bord igen, når forældrene gafler.

En meget primitiv kode kan somthing som denne: --

# include <stdio.h>
# include <unistd.h>
# include <errno. h>

void vigtigste ()
(
int child1, child2, val, if_child;
char err [1000];

if_child \u003d 1;

memset (err, '\ 0', strlen (err));

printf ( "\ nParent proces ID er% d \ n", getpid ());

child1 \u003d fork ();
if (child1 \u003d\u003d -1)
(
strcpy (err, strerror (errno));
)
anden
(
if (child1> 0) / * Hvis gaffel kommandoen resultat barn PID vil være større end nul. * /
(
printf ( "\ nDet child1 proces ID er% d \ n", child1);
if_child \u003d 0;
/ * Sæt flag her for at forhindre barnet processen fra 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 proces ID er% d \ n", child2);

dræbe (child2);
)


dræbe (child1);

exit (0);
)
  #3 (permalink)  
Old 01-22-2002
theultimatechuf theultimatechuf is offline
Registreret Bruger
  
 

Join Date: Jan 2002
Beliggenhed: UK
Stillinger: 6
Thanks a lot, ser lovende ud, jeg ser frem til den dag, hvor jeg kan besvare en andens * NIX programmig spørgsmål. Looks like it's gonna tage længere tid end med VB.
  #4 (permalink)  
Old 01-23-2002
bb666 bb666 is offline
Registreret Bruger
  
 

Join Date: Jan 2002
Beliggenhed: Rumænien
Stillinger: 10
Jeg havde det samme problem med en af mine projekter (du kan se det, hvis den tråd kaldes "at gøre en proces træ ') og at få flere børn processer end forventet Jeg var virkelig et grimt problem.
Har stadig ikke fundet ud af, hvordan det fungerer præcis, men jeg håber Aniruddha råd vil hjælpe mig.
  #5 (permalink)  
Old 01-24-2002
theultimatechuf theultimatechuf is offline
Registreret Bruger
  
 

Join Date: Jan 2002
Beliggenhed: UK
Stillinger: 6
Tak annibuddha (var det, hvordan du stave det?) Se bb666's indlæg jeg troede, jeg ville sende denne ...

Jeg havde lidt problemer som jeg har føjet flere børn, men besluttede at gemme den forælder-id ved start:

pid \u003d getpid ()

end senere Jeg har lige tjekket variable som jeg forstår, vil være i alle de børn mod mod getpid ()

nemlig at gøre et barn proces stoppe og vente evigt, efter det blev oprettet:

if (pid! \u003d getpid ()) // det er ikke den forælder
for (;;)

så de processer, bare at sidde der, indtil de er dræbt (forhåbentlig)

Senest redigeret af theultimatechuf; 01-24-2002 kl 06:13 PM..
  #6 (permalink)  
Old 01-25-2002
bb666 bb666 is offline
Registreret Bruger
  
 

Join Date: Jan 2002
Beliggenhed: Rumænien
Stillinger: 10
Yep. Det er en måde at gøre det, eller du kan bare sende et stopsignal, så barnet processer vil ikke spilde din hukommelse for ingenting. Erstat blot for (;;)
med dræbe (getpid (), SIGSTOP).
Det er alt fint og dandy, men hvad nu, hvis du ønsker barnet proces til rent faktisk at gøre noget? For hvis du stoppe det eller sende det i en uendelig løkke, så kan du ikke helt arbejde inden for det barn, kan du?
Det er faktisk den del jeg er interesseret i: arbejder inden for det barn, men forhindre den i forking når forældrene gafler igen.
  #7 (permalink)  
Old 01-26-2002
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Beliggenhed: Ashburn, Virginia
Indlæg: 9.131
You guys gør det meget sværere, end det skal være. Lad os starte med forking én proces og lagring af sin pid:
Code:
#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);
}

Her barnet processen netop viser sin pid derefter udgange. Du vil sikkert gerne gøre mere med dit barn processer, men efter dine børn at tage sig af forretninger, de skal ud, så de deltager i yderligere forking. Også i mit eksempel den overordnede proces udgange forholdsvis hurtigt. Det betyder, at init arver barnet proces og vil høste det, når det dør. Hvis jeg ønskede at beholde den forælder rundt, ville jeg ønske at forsikre, at det spørgsmål, vent () opfordrer til, at hvert barn, der dør. Hvis jeg ikke gjorde det, ville børnene blive zombier. Jeg plejer bare lade den forælder dør.

Når vi har noget kode, der gør, hvad vi ønsker, hvis vi ønsker at gøre det n gange, bruger vi en loop:
Code:
#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);
}

Som ønsket af OP, børnenes PID registreres i et array. Men jeg stadig bare lade den forælder dør.
Closed Thread

Bogmærker

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 03:06 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0