Ilyen shell parancsfájlt szeretnék:
my-app & echo $my-app-pid
De igen nem tudom, hogy az éppen végrehajtott parancs get pid.
Tudom, hogy csak a jobs -p my-app parancsot használhatom a pid megfogására. De ha többször akarom végrehajtani a héjat, ez a módszer nem fog működni. Mivel a jobspec kétértelmű.
Válasz
Válasz
Get PID:
#!/bin/bash my-app & echo $!
PID mentése a változóba:
#!/bin/bash my-app & export APP_PID=$!
Minden példány mentése PID szövegfájlban:
#!/bin/bash my-app & echo $! >>/tmp/my-app.pid
A kimenet, a hibák és az PID fájlok mentése külön fájlokba :
#!/bin/bash my-app >/tmp/my-app.log 2>/tmp/my-app.error.log & echo $! >>/tmp/my-app.pid echo "my-app PID"s: $(cat /tmp/my-app.pid)"
Megjegyzések
- A kérdés nem ' t kérdezzen az átirányításról, akkor a válasza többnyire megegyezik az elfogadottéval, azzal a különbséggel, hogy ha a
my-apppéldány befejeződik, és talán még rosszabb, hogy a PID később újra felhasználásra kerül, akkor ' ll rossz információ található a fájlban. Nem gondolom, hogy ' nem gondolom, hogy ez a válasz nagy értéket ad a meglévő elfogadott válaszhoz. - @EricRenouf bejegyzés frissítve!
- egy másik származék, amely hasznos lehet. Ez megkapja a PID-t, és egyúttal (többnyire) előtér folyamatként kezeli:
sleep 4 | grep INVALID & export MY_PID=$!; fg; echo $MY_PID returned with $?` - nem APP =
main &a PID megragadásának módja?
Válasz
Próbáljon ki valami hasonlót
pidof my_app >> /tmp/my_app.pid
Megjegyzések
- külső parancs, és lassú, ha a rendszer közvetlenül meg tudja adni a PID-t, miért keres az összes folyamatban, hogy csak ezt találja meg ? és ' nem lehet biztos abban, hogy ' megfelelő értéket kap
Válasz
Próbálja ki a következőket:
ps ef | grep "[m]y-app" | awk "{print $2}"
A folyamat első betűjének elhelyezése [ ] biztosítja, hogy a grep folyamat ne szerepeljen a listában. Ha szükséges, hozzáadhat egy grep-et is a felhasználónevéhez.
Megjegyzések
- Ez ' legjobb esetben törékeny, és nem működik ', ha a
my-app-et többször is végrehajtják – a davidshen84 kifejezetten aggódik emiatt cas. - Ha még ezen az úton is jár, akkor inkább a
pgrepszót kell használnia.
/bin/sh -c 'echo $$>/tmp/my.pid && exec program args' &– sysfault november 24. ' 10, 14:28echo $!my-app & myVar=$! ; fg. Afgismét előtérbe hozza a folyamatot. Ezután később kinyomtathatomecho $myVarés ' biztos vagyok benne, hogy a my-app már befejeződött.