/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
bash
Fra : Jesper


Dato : 01-02-02 23:57

Hvis man i en bashscript starter et program der selv detacher, hvordan får
man få fat i dens pid? $! virker åbenbart kun vist man bruger & til at
sende den i baggrunden.

Specifikt skal jeg lave en ssh forbindelse der forwarder en port, kører et
program lokalt og lukke forbindelsen igen, er der måske en smartere måde?
Jeg starter ssh med '-f -N' så den selv detacher når forbindelsen er klar
og jeg kan udfører min kommando.

--
Jesper

 
 
Ole Michaelsen (02-02-2002)
Kommentar
Fra : Ole Michaelsen


Dato : 02-02-02 00:38

Jesper wrote:
> Hvis man i en bashscript starter et program der selv detacher, hvordan får
> man få fat i dens pid? $! virker åbenbart kun vist man bruger & til at
> sende den i baggrunden.

Jeg ville lave en 'echo $$ > fil.pid' inde fra scriptet, og så senere
'kill `cat fil.pid`' for at slå processen ihjel.

-- Ole

Jesper (02-02-2002)
Kommentar
Fra : Jesper


Dato : 02-02-02 02:56

Ole Michaelsen wrote:

> Jeg ville lave en 'echo $$ > fil.pid' inde fra scriptet, og så senere
> 'kill `cat fil.pid`' for at slå processen ihjel.

Joo.. det er scriptets pid, ikke det program jeg starter. Det jeg skal
bruge er den ssh jeg starters pid, så jeg senere kan slå den ned.

--
Jesper

Ole Michaelsen (02-02-2002)
Kommentar
Fra : Ole Michaelsen


Dato : 02-02-02 11:10

Jesper wrote:
>Ole Michaelsen wrote:
>
>> Jeg ville lave en 'echo $$ > fil.pid' inde fra scriptet, og så senere
>> 'kill `cat fil.pid`' for at slå processen ihjel.
>
>Joo.. det er scriptets pid, ikke det program jeg starter. Det jeg skal
>bruge er den ssh jeg starters pid, så jeg senere kan slå den ned.

Oops. Det indså jeg ikke lige. Hvad med blot noget ala

/usr/bin/pkill -x -u dit-uid ssh

Som leder efter en ssh proces startet af dig og dræber den.

?



Claus Alboege (02-02-2002)
Kommentar
Fra : Claus Alboege


Dato : 02-02-02 11:44

Ole Michaelsen <omic> writes:

> Jesper wrote:
>> Ole Michaelsen wrote:
>>> Jeg ville lave en 'echo $$ > fil.pid' inde fra scriptet, og så
>>> senere 'kill `cat fil.pid`' for at slå processen ihjel.
>> Joo.. det er scriptets pid, ikke det program jeg starter. Det jeg
>> skal bruge er den ssh jeg starters pid, så jeg senere kan slå den
>> ned.

> Oops. Det indså jeg ikke lige. Hvad med blot noget ala

Det kan klares med "exec"

Fra man bash:

exec [-cl] [-a name] [command [arguments]]
If command is specified, it replaces the shell. No
new process is created.

Dog skal man være meget opmærksom på, at man får fjernet sin .pid fil
når programmet afsluttes (uanset hvordan det afsluttes) - kan det gøres
pålidligt?

> /usr/bin/pkill -x -u dit-uid ssh
> Som leder efter en ssh proces startet af dig og dræber den.

Medmindre man specificere det nærmere for pkill dræber den alle ssh
processer, man har kørende.


/Claus A


Martin Mann (02-02-2002)
Kommentar
Fra : Martin Mann


Dato : 02-02-02 12:28

Hej Jesper,

Jesper wrote:

> Hvis man i en bashscript starter et program der selv detacher, hvordan får
> man få fat i dens pid? $! virker åbenbart kun vist man bruger & til at
> sende den i baggrunden.
>



Bash har jobcontrol, hvilket vil sige at hvis du starter et program i
baggrunden får du et job nummer og et pid angivet

$ updatedb &
[1] 432
hvor [jobnummer] pid

Du kan derefter dræbe en process ved at skrive

$ kill %[jobnummer]

altså

$ kill %1
[1]+ Terminated updatedb

Kan det hjælpe?

Mvh
Martin Mann





Martin Mann (02-02-2002)
Kommentar
Fra : Martin Mann


Dato : 02-02-02 12:33

*bonker sig selv oven i hovedet*

.... jeg havde lige glemt at prog'et detachede og ikke bare blev kørt i
baggrunden...

undskyld ulejligheden ;)

Mvh
Martin Mann

Martin Mann wrote:

> Hej Jesper,
>
> Jesper wrote:
>
>> Hvis man i en bashscript starter et program der selv detacher, hvordan
>> får man få fat i dens pid? $! virker åbenbart kun vist man bruger &
>> til at sende den i baggrunden.
>>
>
>
>
> Bash har jobcontrol, hvilket vil sige at hvis du starter et program i
> baggrunden får du et job nummer og et pid angivet
>
> $ updatedb &
> [1] 432
> hvor [jobnummer] pid
>
> Du kan derefter dræbe en process ved at skrive
>
> $ kill %[jobnummer]
>
> altså
>
> $ kill %1
> [1]+ Terminated updatedb
>
> Kan det hjælpe?
>
> Mvh
> Martin Mann
>
>
>
>


Jesper (02-02-2002)
Kommentar
Fra : Jesper


Dato : 02-02-02 14:25

Jesper wrote:

Når jeg nu sidder og tænker over det. Programmet forker jo og slår den
oprindeligt process ned for at detache. Det kan bash vel næppe holde styr
på. Den eneste løsning er vel at programmet selv skriver sin pid i en fil,
men det giver ssh så vidt jeg kan se ikke mulighed for.

--
Jesper

Søg
Reklame
Statistik
Spørgsmål : 177557
Tips : 31968
Nyheder : 719565
Indlæg : 6408881
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste