.sh script: ctrl-c an screen senden

Seite 1 von 2 - Forum: Linux and other OS auf overclockers.at

URL: https://www.overclockers.at/linux/sh-script-ctrl-c-an-screen-senden_239881/page_1 - zur Vollversion wechseln!


wergor schrieb am 03.08.2014 um 10:43

ich bastle mir gerade ein skript für einen service, der bei start einen screen öffnet und ein programm ausführt. bei stop soll das programm (pyload) mit ctrl-c beendet und der screen gekillt werden.

Code:
[root@localhost ~]# screen -S pyload -X stuff "^C"
beendet das programm wie gewünscht. wie sende ich ctrl-c aus einem skript heraus an den screen?


Lukas schrieb am 03.08.2014 um 12:03

Was möchtest du mit pyload machen? Möglicherweise kann man es eleganter lösen als SIGTERM/SIGINT an den Prozess zu schicken.


Ringding schrieb am 03.08.2014 um 12:26

Zwar keine Antwort auf die Frage, aber screen hat das command :kill, das den aktuellen screen löscht und alles beendet, was darin läuft. Und wenn es der letzte/einzige ist, wird wohl die ganze session beendet. Das dürfte ziemlich genau das sein, was du brauchst. Soweit ich weiß, kann man diese commands auch recht leicht von außen schicken, ich weiß allerdings nicht auswendig, wie.


wergor schrieb am 03.08.2014 um 12:38

ich wollte pyload als service laufen lassen. ich habe jetzt durch die doku erfahren, dass man pyload auch einfach mit --daemon starten kann, was meine ganze screen sache überflüssig macht :D
pyload -q oder --quit ist natürlich die elegantere lösung, wusste ich aber vorher nicht

den kill command habe ich versucht, aber der hat gar nichts gemacht. weis nicht warum, ist in der zeile ein fehler?

Code:
screen -S pyload -X kill


Lukas schrieb am 03.08.2014 um 12:50

Mit passender PID kannst du mit

Code:
kill -INT <PID>
das SIGINT (Signal, welches Ctrl-C schickt) an den Prozess schicken. Ob du das an screen oder direkt an pyload schickst ist dann deine Entscheidung.

Ich verwende pyLoad mit dem offiziellen Debian Paket, in welchem auch init scripts vorhanden sind. Alles andere regelt mein init system. :)

e: Mit offiziell meinte ich die Pakete von den pyLoad Entwicklern hier. AFAIR gibt es kein Paket in den debian repositories.


wergor schrieb am 03.08.2014 um 13:53

das problem an

Code:
kill -INT <PID>
ist dass ich die PID eben wissen muss. das habe ich auch versucht, aber nicht hinbekommen (linuxnoob olé :D )

für rhel/centos gibts leider kein offizieles paket, aber mit dem sourcecode geht das eigentlich problemlos, nur der service fehlt.


Lukas schrieb am 03.08.2014 um 14:24

Für die Zukunft:

Code:
ps -A | grep pyload
Müsste dir die PID anzeigen und mit
Code:
ps -A | grep pyload | cut -d ' ' -f2
sollte dir die PID alleine angezeigt werden.


wergor schrieb am 03.08.2014 um 15:29

thx!


COLOSSUS schrieb am 04.08.2014 um 10:54

Zitat von Lukas
Code:
ps -A | grep pyload
Code:
ps -A | grep pyload | cut -d ' ' -f2

https://www.youtube.com/watch?v=xoMgnJDXd3k

Code:
 $ whatis pgrep
pgrep (1)            - look up or signal processes based on name and other attributes


-=Willi=- schrieb am 04.08.2014 um 12:25

Haha mmd :D


Lukas schrieb am 04.08.2014 um 18:12

Zitat von COLOSSUS
https://www.youtube.com/watch?v=xoMgnJDXd3k

Code:
 $ whatis pgrep
pgrep (1)            - look up or signal processes based on name and other attributes

Hahahaha colo :D

Man lernt nie aus. Aber jetzt wo du es sagst, kann ich mich wieder erinnern an pgrep. :)


that schrieb am 05.08.2014 um 23:01

Warum alles so kompliziert, wenns "killall" gibt?


wergor schrieb am 05.08.2014 um 23:09

man kann sichs ganz ganz einfach machen, oder man kann was lernen :p


COLOSSUS schrieb am 06.08.2014 um 11:05

Wer PIDs nicht nur listen, sondern auch Signale an sie senden will, kann sich an pgrep(1)s unfreundlicheren Bruder, pkill(1), wenden.


GrandAdmiralThrawn schrieb am 06.08.2014 um 13:30

Ich mag pkill, da muß man nicht soviel denken, einfach Mal schießen und hoffen daß man nicht zuviel erwischt. :rolleyes:




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025