[bash] PID van proces in een pipeline.

Pagina: 1
Acties:

  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 01-02 22:15

SA007

Moderator Tweaking
Topicstarter
Ik heb een volgend commando in een bash script:

/pad/naar/executable | tee logfile&

en nu moet ik de pid hebben van executable, alleen met $! krijg je de pid van tee, niet van executable.

In mijn paar testgevallen is de pid van executable wel precies 1 lager dan die van tee, maar denk niet dat ik daarvan uit mag gaan.

Een ps aux / grep combo is niet mogelijk, aangezien executable meerdere keren draait en ik altijd zeker weten degene moet hebben die net gestart is.

iemand die misschien een oplossing heeft?

  • capedro
  • Registratie: Oktober 2000
  • Laatst online: 17-12-2025
probeer het eens met $$

Hopelijk kort maar krachtig

My weblog


  • wzzrd
  • Registratie: Februari 2000
  • Laatst online: 17-01 19:39

wzzrd

The guy with the Red Hat

$$ is de PID van je shell, niet van dat eerste commando. Je kunt er inderdaad niet vanuit gaan dat de PID van tee één hoger is dat die van je commando. Helemaal toeval is het ook niet, maar op een druk systeem zou dat best een fout kunnen gaan. Ik weet niet of het kan in jouw situatie, maar je zou eigenlijk dus eerst $! moeten opslaan in een variabele dan dan pas tee moeten aanroepen.

  • TheFirepit
  • Registratie: April 2004
  • Laatst online: 28-01 10:12

TheFirepit

Vuurbal

Zou je het niet met zoiets kunnen doen:


code:
1
ps -ef | grep -i 'executable' | awk '{print$2}' | tail -1

[ Voor 6% gewijzigd door TheFirepit op 16-03-2007 09:34 ]

It's nice to be important, but it's more important to be nice.


  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 01-02 22:15

SA007

Moderator Tweaking
Topicstarter
wzzrd: Ik weet dat het fout kan gaan op een drukke (zoals mijn) server, daarom wil ik ook iets anders, dit is ook de reden dat ik niet met ps kan werken.
Hoe ik de executable kan aanroepen zonder de pipeline aan te leggen en daarna pas de pipe te doen zou ik echt niet weten.

Ik heb een semi-ander idee:
code:
1
2
3
4
5
6
7
8
9
10
#!/bin/bash

function run() {
  sleep 100&
  PID=$!
}

run

echo $PID


Dan krijg ik de PID netjes te zien.
als ik pipe via tee doet het het ook nog steeds, maar zodra ik tee dan in de background draai niet meer, dus als ik er
code:
1
run | tee testfile&

van maak gaat run in een andere bash draaien en is het pid weg.

Is hier een andere (makkelijkere) oplossing voor dat een de pid in een file gooien?
export PID werkt helaas niet.

  • TheFirepit
  • Registratie: April 2004
  • Laatst online: 28-01 10:12

TheFirepit

Vuurbal

Het maakt niet uit hoe rete druk het op een server is. Als je een `ps -ef` uitvoerd dan wordt deze gesorteerd op het tijdstip dat deze gestart is, waarom zou je hier dan niet mee kunnen werken om te kijken wat de PID is van het laatst gestarte proces van die executable?

Je wilt de PID hebben van de laatste executable die gestart is. Met een `ps -ef`, een grep en een tail lukt dat dus het makkelijkste...

It's nice to be important, but it's more important to be nice.


  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 01-02 22:15

SA007

Moderator Tweaking
Topicstarter
Omdat het wel 's wil voorkoemn dat meerdere van die executables tegelijk starten/stoppen/restarten (server reboot, hint, hint) en dan kan het bestwel misgaan.

Ik denk dat ik wel gewoon een pidfile pak.

  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 01-02 22:15

SA007

Moderator Tweaking
Topicstarter
<schop>

  • Rainmaker
  • Registratie: Augustus 2000
  • Laatst online: 14-07-2024

Rainmaker

RHCDS

lukt het niet met de pidfile dan?

Evt andere "oplossing"

code:
1
2
3
/usr/bin/excecute > /tmp/logfilevanmijnexec
- doe iets met $! -
tail -f /tmp/logfilevanmijnexec


offtopic:
Weet niet helemaal zeker of dit hetzelfde doet als tee

[ Voor 18% gewijzigd door Rainmaker op 18-03-2007 09:04 ]

We are pentium of borg. Division is futile. You will be approximated.


  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 01-02 22:15

SA007

Moderator Tweaking
Topicstarter
Goed idee, zou alleen een redelijk grote -n meegooien, 1000 ofzo, voor het geval hij erg snel een hoop text uitspuugd, maar zal 't thuis maar 's proberen.
Pagina: 1