|
| 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
| |
|
|