Maxwell: kill -TERM über Programmname

Hallo,

sorry, bin sehr wissbegierig ;-)

mit kill -TERM <pid> kann man ja einen Prozess über seine pid killen.

wie geht das nach Dateiname, also z.B.:

ich starte über perl test.pl ein Script

auf der anderen Konsole will ich den (oder alle mit demselben Namen) Prozess killen:

"kill -TERM test.pl"
-bash: kill: test.pl: arguments must be process or job IDs

wie geht das nur mit dem Programmnamen?

Grüsse,

Maxwell

  1. Hi,

    "kill -TERM test.pl"
    -bash: kill: test.pl: arguments must be process or job IDs

    wie geht das nur mit dem Programmnamen?

    das sollte mit killall gehen:

    $ man killall

    Gruß,
    Andreas.

  2. Hi!

    wie geht das nur mit dem Programmnamen?

    Mit kill gar nicht.
    Nimm killall statt kill. Dann kannst du den Namen eingeben.

    (Solltest du nicht mit der GNU-Version von killall arbeiten, dann ist der Link oben nicht der zu der richtigen Man-Page. Hier wäre die Man-Page zur BSD-Version von killall.)

    Schöner Gruß,
    rob

  3. Hi,

    wie geht das nur mit dem Programmnamen?

    Na indem du erstmal über den Namen die PID herausfindest und den Prozess dann killst. Das geht z.B. mit einer einfachen Pipe ala: ps -A | grep myProgName | kill

    Mit ps -A listest du alle im System laufenden Prozesse auf und übergibst stdout an stdin von grep, das dir den Prozess herausfiltert, den du haben willst. Das Ergebnis dieser Suche wird an die stdin von kill weitergeleitet, was den Prozess dann beendet. Das ist die einfachste Lsg über den Bash - Interpreter, man kann das bestimmt besser mit einer "echten" Programmiersprache machen.

    Grüße aus Leipzig

    1. Hallo zipdrive.

      wie geht das nur mit dem Programmnamen?

      Na indem du erstmal über den Namen die PID herausfindest und den Prozess dann killst. Das geht z.B. mit einer einfachen Pipe ala: ps -A | grep myProgName | kill

      Der erste Teil ließe sich wie folgt verkürzen:

      $ pgrep myProgName | kill

      Einen schönen Samstag noch.

      Gruß, Mathias

      --
      ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
      debian/rules
      1. Hallo Mathias.

        Der erste Teil ließe sich wie folgt verkürzen:

        $ pgrep myProgName | kill

        Das ganze Teil ließe sich wie folgt verkürzen:

        $ pkill myProgName

        ;)

        Servus,
        flowh

        1. Hallo flowh.

          Der erste Teil ließe sich wie folgt verkürzen:

          $ pgrep myProgName | kill

          Das ganze Teil ließe sich wie folgt verkürzen:

          $ pkill myProgName

          ;)

          Minimalisten unter sich. Danke für den Tipp.

          Einen schönen Sonntag noch.

          Gruß, Mathias

          --
          ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
          debian/rules
          1. Minimalisten unter sich. Danke für den Tipp.

            Ich glaube das kann man noch soweit verkürzen, indem man den Prozess garnicht erst startet, dann brauch man garnichts einzugeben.

            Grüße aus Leipzig

  4. Hallo,

    Klasse! killall war genau das, wonach ich gesucht habe! Danke.

    Hm. Ich hab jetzt ein SH-Script unter /etc/init.d/test, welches das Perl-Programm "test" aufruft. Mit killall werden beide gekillt. Eigentlich kein Problem, aber beim test-perl-script kann ich die aktuell über sh gestartete Instanz über $SIG{TERM}="IGNORE" vom getermed werden schützen.

    Gibt halt jetzt eine kleine Unschönheit: Da das SH-script gekillt wird, kommt man gleich wieder auf die konsole und das perl-programm mit SIGTERM IGNORE macht eine sekunde danach einen output.

    Ich möchte gern die Konsole "frei" haben, das heisst, die Meldung muss vor der Rückkehr zur Konsole aus dem Perlscript raus.

    Jetzt seh ich zwei Lösungen:

    1. sh-script unter /etc/init.d/ umbenennen, was ich nicht möchte (unschön)
    2. das sh-script vom SIGTERM schützen, also auch dieses auf IGNORE setzen.

    kann ich Lösung 2 irgendwie umsetzen?

    Grüsse,

    Maxwell