Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: TIBOR 14 Září 2016, 20:54:50

Název: Skript/pomoc s vysvetlenim spustanych procesov.
Přispěvatel: TIBOR 14 Září 2016, 20:54:50
Zdravim.
Spravil som si skript, tu je cely, pre istotu.
Kód: [Vybrat]
#!/bin/bash
#xgamma -rgamma 0.6
#xgamma -ggamma 0.6
#xgamma -bgamma 0.6
                   #zisti PID prave spustaneho procesu
ja=$$
                   #nacita PID spustenych procesov z nazvom gamma0.75
cislo_procesu=$(ps -A | grep -i "gamma0.75"|awk '{print $1}'|tr '\n' ' ')
                   #zisti ci PID procesu nieje rovnaky ako prave spustany
                   #ak nieje zabije ho ak je necha ho bezat
for PID in $cislo_procesu; do
  if [ "$PID" != "$ja" ]; then
      kill -9 "$PID"
  fi
done
                   #zistuje ci je v glxinfo ako device zadany intel
                   #/tato cast nieje nutna k fungovaniu skriptu az po while; do/
karta_intel=$(glxinfo | grep -ic "device.*intel")
                   #ak je device intel zapise do suboru GK intel
                   #ak je device nvidia zapise do suboru GK nvidia
                   #tento zapis sluzi na zobrazenie v conky
if [ "$karta_intel" -eq 1 ]; then
    echo "Intel" > '/home/t/.subory/moje_nastavenia/GK.txt'
  else
    echo "Nvidia" > '/home/t/.subory/moje_nastavenia/GK.txt'
fi
                   #caka 5s
                   #ak je device intel spusta xrandr s parametrom vystup eDP1
                   #ak je device nvidia spusta xrandr s parametrom vystup eDP-1
                   #bezi kym sa ntb nevypne alebo kym ho nezabije dalsie spustenie tohto skriptu
while true; do
sleep 5
karta_intel=$(glxinfo | grep -ic "device.*intel")
if [ "$karta_intel" -eq 1 ]; then
  (xrandr --output eDP1 --gamma 0.75:0.75:0.75)
  else
  (xrandr --output eDP-1 --gamma 0.75:0.75:0.75)
fi
done
exit 0
V skratke
Pozrie ake PID ma sam skript s menom gamma0.75
Ak uz bezi proces s takym menom tak ho zabije a necha bezat iba seba(prave spusteneho)
Dalej sa stara o nastavenie gamma(to uz by nemalo byt podstatne)

Ide mi o tu prvu cast s procesmi.
Ak ten skript spustim prvy krat najde procesy
Kód: [Vybrat]
22233 pts/14 00:00:00 gamma0.75.sh
22234 pts/14 00:00:00 gamma0.75.sh
/home/t/.subory/skripty/gamma0.75.sh: riadok 14: kill: (22237) - Tento proces neexistuje
22233 on sam, toto mi zobrazuje aj monitor systemu v sekcii procesy. Toto necha bezat.
22234 uz neviem co by mohlo byt. Toto asi zabije.
22237 no a toto uz neviem vobec co by mohlo byt ked to uz neexistuje. Toto pri killovani zlyha.

Ak ho spustim znova
Kód: [Vybrat]
22233 pts/14 00:00:00 gamma0.75.sh
22412 pts/15 00:00:00 gamma0.75.sh
22413 pts/15 00:00:00 gamma0.75.sh
/home/t/.subory/skripty/gamma0.75.sh: riadok 14: kill: (22416) - Tento proces neexistuje
22233 Je predchadzajuci spusteny skrip. Toto zabije co vidim aj v monitor systemu.
22412 prave spustany skript. Necha bezat, zobrazi v monitor sytemu.
22413 uz neviem co by mohlo byt. Toto asi zabije.
22416 zasa ako pri predchadzajucom. Toto pri killovani zlyha.

V spustani procesov sa vobec nevyznam preto sa chcem opytat co by mohli byt tie procesy co nevidim v monitore systemu a co by mohli byt tie co najde pri vyhladani ale pri killovani uz nebezia. Nieje to nebezpecne ked ich ukoncujem?
Sript inak robi co ma a nevidim s nim ziadny problem.
Ked si necham zobrazit stromovu strukturu spustenych procesov tak pod gamma0.75 mi zobrazuje iba sleep s uplne inym PID ako su tu vypisane.

Pripadne je moja teoria spravna ze to su procesy prikazov ktore spustam v tom skripte? xrandr, echo zapisujuce na disk? Aj ked neviem ci by ich vypisovalo pod nazvom gamma0.75.
Název: Re:Skript/pomoc s vysvetlenim spustanych procesov.
Přispěvatel: Cuore 15 Září 2016, 07:21:42
tak já se přidám, sice jsem to zatím neřešil, ale mám stejnou zkušenost. Hledám obdobně, příklad scriptu cekani.sh
Kód: [Vybrat]
pid=$(ps -e | grep "cekani.sh" | sed 's/^ *//;s/ *$//' | grep -v $$ | cut -d' ' -f1)
 echo "nalezen předchozí proces s PID:"$pid" zabíjím"
kill -9 $pid 2>/dev/null
a najdě vždy jeden neexistující proces, zatím to posílám do 2>/dev/null
Název: Re:Skript/pomoc s vysvetlenim spustanych procesov.
Přispěvatel: GdH 15 Září 2016, 14:41:48
Zkusím napovědět  ;)
Kód: [Vybrat]
echo 0. $BASHPID; echo 1. $BASHPID 1>&2 | echo 2. $BASHPID; echo 3. $BASHPID
Název: Re:Skript/pomoc s vysvetlenim spustanych procesov.
Přispěvatel: TIBOR 15 Září 2016, 16:18:40
Pochopil som to spravne ze tie dalsie PID mi vytvara pouzitie rury v subshell? ( | )
http://tldp.org/LDP/abs/html/internalvariables.html
$BASHPID
outside of subshell
inside of subshell
Název: Re:Skript/pomoc s vysvetlenim spustanych procesov.
Přispěvatel: GdH 15 Září 2016, 16:50:26
Ve vašem případě je to ještě průhlednější, vy spouštíte přímo subshell s tím ps, ten samozřejmě běží v novém procesu stejného jména a jeho výstup ukládáte do proměnné, kterou zpracováváte až po jeho smrti. Chtěl jsem ale upozornit, že nové procesy se vytvářejí i před a za rourou. Něco jsem o tom onehdá napsal (http://gdhnotes.blogspot.cz/2013/05/presmerovani-roury-bash.html).
Název: Re:Skript/pomoc s vysvetlenim spustanych procesov.
Přispěvatel: TIBOR 15 Září 2016, 17:28:01
Vdaka.
Název: Re:Skript/pomoc s vysvetlenim spustanych procesov.
Přispěvatel: GdH 15 Září 2016, 18:35:07
Pokud je skript spouštěn přímo jako spustitelný soubor zadáním cesty k němu a bude se tudíž proces jmenovat po něm, zdá se mi zajímavější killnout všechny ostatní stejného jména třeba takto (pokud jich nebudou desetitisíce):
Kód: [Vybrat]
pgrep "jmeno_procesu" | grep -v $$ | xargs kill -9Přepínačem -f se dá případně záběr pgrep rozšířit na celý příkaz, kterým byl skript spuštěn.
Název: Re:Skript/pomoc s vysvetlenim spustanych procesov.
Přispěvatel: TIBOR 15 Září 2016, 18:53:26
To vyzera sikovne a funguje to.