Programme killen - wie ist der Befehl?

Alles rund um die möglichen Desktopumgebungen wie KDE, Gnome, XFCE usw. die es unter Linux gibt

Moderator: Moderatoren

Antworten
HaukeW
Member
Member
Beiträge: 189
Registriert: 30. Jan 2005, 14:39
Wohnort: Hamburg
Kontaktdaten:

Programme killen - wie ist der Befehl?

Beitrag von HaukeW » 1. Sep 2005, 14:48

Hallo!
Wie hier erläutert, beenden sich Programme bei mir nicht immer richtig. Extrem wird es bei dem Spiel World of Warcraft, was sich gar nicht beendet, sondern, wenn ich auf "Beenden" klicke, einfach einfriert. Das scheint aber ein Fehler im Spiel zu sein. Das Blöde ist nur, dass wenn das Spiel einfriert, ich es mit STRG-ALT-ESC beenden muss, dabei durch die Liste scrollen muss, weil ich es nur unter 800x600 spielen kann - und dann mit 2-3 Mal STRG-ALT-"-" die Auflösung des virtuellen Desktops wieder auf 1280 schalten muss.

Der Grund für diesen Thread, ist die Frage, ob man ein Script schreiben kann, dass die Auflösung wieder auf 1280 setzt, und das das Programm killt.

Gruß, Hauke
System: SuSE 11.3
AMD Athlon 3500+
Asus Mainboard
Soundblaster audigy2
Nvidia GeForce 8600
Festplatte+DVD-Brenner
----
eingetragener Linux-User #391592
http://counter.li.org

Werbung:
HaukeW
Member
Member
Beiträge: 189
Registriert: 30. Jan 2005, 14:39
Wohnort: Hamburg
Kontaktdaten:

Beitrag von HaukeW » 3. Sep 2005, 15:05

ok, ich bin einen Schritt weiter, ich kann mit ALT-F2 Projekt-ids killen. (kill 7624 z.B. )
Wie finde ich raus, welche Projekt-id ein bestimmtes Programm hat? (z.B. wine)
Einfach "kill wine" schreiben geht nicht...

Gruß, Hauke
System: SuSE 11.3
AMD Athlon 3500+
Asus Mainboard
Soundblaster audigy2
Nvidia GeForce 8600
Festplatte+DVD-Brenner
----
eingetragener Linux-User #391592
http://counter.li.org

Benutzeravatar
admine
Administrator
Administrator
Beiträge: 8722
Registriert: 15. Feb 2004, 21:13
Wohnort: Dresden
Kontaktdaten:

Beitrag von admine » 3. Sep 2005, 15:14

HaukeW hat geschrieben:ok, ich bin einen Schritt weiter, ich kann mit ALT-F2 Projekt-ids killen. (kill 7624 z.B. )
Wie finde ich raus, welche Projekt-id ein bestimmtes Programm hat? (z.B. wine)
Einfach "kill wine" schreiben geht nicht...
Das ist keine Projekt-ID sondern die Prozess-ID ;)
und du findest sie raus mit

Code: Alles auswählen

ps -ef | grep wine
..:: unser Linux-Club-Wiki ::..
-------------------------
..:: Deutsche Mugge ::..
-------------------------

Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus » 3. Sep 2005, 15:38

vielleicht schaust du dir mal das Programm htop an. Es ist ein kleines Tool für die Konsole mit dem kannst du auch deine Programme abschiessen ;)

http://htop.sourceforge.net/

gibt es auch als RPM hier:
http://ftp4.gwdg.de/pub/linux/suse/apt/ ... er-oc2pus/
http://ftp4.gwdg.de/pub/linux/suse/apt/ ... er-oc2pus/
http://ftp4.gwdg.de/pub/linux/suse/apt/ ... er-oc2pus/
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User

taki
Advanced Hacker
Advanced Hacker
Beiträge: 974
Registriert: 30. Apr 2004, 17:40
Wohnort: Berlin
Kontaktdaten:

Beitrag von taki » 3. Sep 2005, 15:51

Auch sehr nett, um lästige Programme loßzuwerden:

killall -SIGNAL befehl
Gerade bei wine ganz hilfreich.

Code: Alles auswählen

killall -KILL wine-server
Sowas mach ich in der Konsole. Dann sieht man auch gleich warum es nicht klappt, wenn es nicht klappt ;-)

Wenn ich nicht genau weiß, wie der Prozess genau heißt, bemühe ich vorher
ps aux |grep suchbegriff
also z.B.

Code: Alles auswählen

ps aux |grep wine
SuSE 12.3 kernel 3.7.10-1.16-desktop, K Desktop Environment Version 4.10.5 r1 - Medion Titanium Aldi v. 03/2009

HaukeW
Member
Member
Beiträge: 189
Registriert: 30. Jan 2005, 14:39
Wohnort: Hamburg
Kontaktdaten:

Beitrag von HaukeW » 4. Sep 2005, 14:49

Danke für die Antworten, der Befehl

Code: Alles auswählen

killall -KILL wine
klappt großartig. Aber wie kriege ich es hin, mit einem Befehl die Auflösung des virtuellen Desktops von 800x600 wieder auf 1280x960(1024?) zu stellen, ohne 3x STRG-ALT-"-" zu drücken?
System: SuSE 11.3
AMD Athlon 3500+
Asus Mainboard
Soundblaster audigy2
Nvidia GeForce 8600
Festplatte+DVD-Brenner
----
eingetragener Linux-User #391592
http://counter.li.org

HaukeW
Member
Member
Beiträge: 189
Registriert: 30. Jan 2005, 14:39
Wohnort: Hamburg
Kontaktdaten:

Beitrag von HaukeW » 8. Sep 2005, 01:24

Die Lösung zum Auflösungs-Umschalten-Problem siehe hier:

Gruß, Hauke
System: SuSE 11.3
AMD Athlon 3500+
Asus Mainboard
Soundblaster audigy2
Nvidia GeForce 8600
Festplatte+DVD-Brenner
----
eingetragener Linux-User #391592
http://counter.li.org

Benutzeravatar
spunti
Hacker
Hacker
Beiträge: 598
Registriert: 6. Mai 2004, 10:49

Beitrag von spunti » 8. Sep 2005, 11:40

kann es sein, daß es parameter -kill nicht gibt?

spunti

Benutzeravatar
TomcatMJ
Guru
Guru
Beiträge: 2480
Registriert: 1. Apr 2004, 00:29
Wohnort: Köln
Kontaktdaten:

Beitrag von TomcatMJ » 8. Sep 2005, 12:03

Hi!
Mit

Code: Alles auswählen

kill -l
kriegt man die Liste der zulässigen Signale die man per kill-Befehl an einen Prozess geben kann, wahlweise als Nummer oder Begriff,woraus resultiert, daß

Code: Alles auswählen

kill -9 <ProzessID>
dasselbe ist wie

Code: Alles auswählen

kill -SIGKILL <ProzessID>
.Sauberer ist jedoch statt dem SIGKILL ein SIGTERM (15) an den Prozess zu schicken sofern er darauf reagiert und nicht schon halb erschossen im System rumlauert, da der Prozess so noch die Gelegenheit bekommt eventuell zu speichernde Dinge vor dem Beenden sauber zu speichern, wohingegen ein SIGKILL den Prozess sofort beendet egal was er gerade noch tut.

Bis denne,
Tom

taki
Advanced Hacker
Advanced Hacker
Beiträge: 974
Registriert: 30. Apr 2004, 17:40
Wohnort: Berlin
Kontaktdaten:

Beitrag von taki » 8. Sep 2005, 12:06

killall kennt -KILL (u.a.) als benanntes Signal. kill kennt -SIGKILL (u.a.).

Großschreibung beachten, ein -kill kennt kein von mir bekanntes Tool.

SIGTERM (15) ist voreinstellung. Wenn bei kill oder killall gar kein Signal angegeben wird, schickt es immer SIGTERM.

SIGKILL ist Signal 9 und war bei meinen Experimenten mit störrischen Wine-Prozessen immer das Einzige, was half. Ist aber schon sehr lange her, dass ich mal mit wine gefummelt habe, bisher hab ich noch für jedes Programm ein mindestens ebenbürtiges Linuxprogramm gefunden, und wenn nicht, dann war das Programm doch nicht wirklich wichtig.
SuSE 12.3 kernel 3.7.10-1.16-desktop, K Desktop Environment Version 4.10.5 r1 - Medion Titanium Aldi v. 03/2009

Benutzeravatar
TomcatMJ
Guru
Guru
Beiträge: 2480
Registriert: 1. Apr 2004, 00:29
Wohnort: Köln
Kontaktdaten:

Beitrag von TomcatMJ » 8. Sep 2005, 12:13

Taki: Jepp, nur betrifft killall eben alle Prozesse die denselben Namen haben, kill hingegen nur einen mit der entsprechenden ProzessID, manchmal ist dies ein sehr relevanter Unterschied ,z.B. wenn man nur einen bestimmten Konqueror-Prozess abwürgen will ohne direkt alle zu erschiessen, oder wenn man aus versehen ein Programm 10 mal gestartet hat und diese alle auf einmal beenden will ohne sich 10 ProzessIDs rauszufischen...
Das ist eben typisch Linux/Unix, mehrere Lösungen für artverwandte Probleme die aber in feinheiten exakt auf ein Problem zugeschnitten sind, auch wenn sie grob gesehen auf mehrere Probleme die Antwort darstellen können....;)
(siehe auch Xine vs. MPlayer vs. Ogle, Apache vs. Roxen vs. Zeus vs. sonstige HTTP-Server...)
Bis denne,
Tom

Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus » 8. Sep 2005, 12:32

na dann pack ich auch noch einen rein ;)

wer viele Java-Programme laufen hat und eines davon killen will, kann dieses Script nuzen um die PID zu ermitteln:

Code: Alles auswählen

#!/bin/bash
#
# Copyright (c) 2000 Alexander V. Konstantinou <akonstan@acm.org>
#
# Permission to use, copy, modify, distribute and sell this software
# and its documentation for any purpose is hereby granted without fee,
# provided that the above copyright notice appear in all copies and
# that both that copyright notice and this permission notice appear
# in supporting documentation.  Alexander V. Konstantinou makes no
# representations about the suitability of this software for any
# purpose.  It is provided "as is" without express or implied warranty.
# 
# Description: prints out the java processes running on a Linux host.
#              Optional "-noflags" argument controls verbosity
#
# Requirements: Linux host with a /proc filesystem
#
# Updates: http://www.cs.columbia.edu/~akonstan/javaps
#
# $Id: javaps,v 1.3 2002/01/21 02:32:12 akonstan Exp $

PATH=/bin:/usr/bin

SYSNAME=`uname -s`

if [ "$SYSNAME" != "Linux" ]; then
  echo "$0: must be executed on Linux system (found $SYSNAME)" >&2
  exit 1
fi

if [ ! -d "/proc" ]; then
  echo "$0: Linux host does not appear to have a /proc filesystem" >&2
  exit 1
fi

NOFLAGS=0
if [ -n "$1" ]; then
  if [ "$1" = "-noflags" ]; then
    NOFLAGS=1
  else
    echo "Usage: $0 { -noflags }" >&2
    exit 1
  fi
fi

echo "PID	Process"

# For every file in the /proc file system

FILES=`/bin/ls -1 /proc`

for FILE in $FILES; do
  PROCESS_ID=$FILE
  STATUS_FILE=/proc/$FILE/status
  CMDLINE_FILE=/proc/$FILE/cmdline

  # Check if it is a process directory and that we have read access
  if [ -d "/proc/$FILE" -a -r $STATUS_FILE -a -r $CMDLINE_FILE -a "$FILE" != "/proc/self" ]; then
    
    PROCESS_NAME=`grep 'Name:' $STATUS_FILE | awk '{print $2}'`

    # Only interested in java processes
    if [ "$PROCESS_NAME" = "java" ]; then
      PARENT_PID=`grep 'PPid' $STATUS_FILE | awk '{print $2}'`

      # Figure out if process has a parent that is a java process
      ISROOT=0
      if [ $PARENT_PID -eq 1 ]; then
        ISROOT=1
      else
        PARENT_NAME=`grep 'Name:' /proc/$PARENT_PID/status | awk '{print $2}'`
        if [ "$PARENT_NAME" != "java" ]; then
          ISROOT=1
        fi
      fi

      # If root java process print out
      if [ $ISROOT -ne 0 ]; then
        PROCESS_CMDLINE="`cat $CMDLINE_FILE | tr '\000' ' '`"

        IGNORE_ARG=0
        DESCR=
        for ARG in $PROCESS_CMDLINE; do
          if [ $NOFLAGS -eq 0 ]; then
             DESCR="$DESCR $ARG"
          else
            if [ $IGNORE_ARG -eq 0 ]; then
              if [ $ARG = "-classpath" -o $ARG = "-cp" ]; then
                IGNORE_ARG=1
              elif [ -z "`echo $ARG | grep '^-D'`" -a -z "`echo $ARG | grep '^-X'`" ]; then
                DESCR="$DESCR $ARG"
              fi
            else 
             IGNORE_ARG=0
            fi
          fi
        done
        echo "$PROCESS_ID	$DESCR"
      fi
    fi
  fi
done
Aufruf:
javaps { -noflag }
* -noflag : filters out the Java flags -D, -X, -classpath, -cp
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User

Benutzeravatar
spunti
Hacker
Hacker
Beiträge: 598
Registriert: 6. Mai 2004, 10:49

Beitrag von spunti » 8. Sep 2005, 13:00

gut, ich gebe hiermit offiziell zu, daß -KILL beim befehl kill geht. ist anscheinend keine parameter, sondern ein signal.

so, aber bei killall bestreite ich das weiterhin. laut meiner manpage kann man da nicht signale über geben ohne -s vorher, oder?

spunti
mir gehts wie immer ums prinzip:-)

taki
Advanced Hacker
Advanced Hacker
Beiträge: 974
Registriert: 30. Apr 2004, 17:40
Wohnort: Berlin
Kontaktdaten:

Beitrag von taki » 8. Sep 2005, 13:08

Nun denn zum Prinzip

killall -KILL ist das gleiche wie killall -s 9. Ging bei mir immer, als ich noch mit wine rumspielte. Damals hatte ich allerdings noch SuSE 9.1, nicht 9.3. Möglicherweise geht das nicht mehr. Möglicherweise war das auch nicht POSIX-Konform.

Schade, hier im Büro kann ich nicht nachschauen, weil das killall auf der Solaris sich wiederum völlig anders verhält als zuhause. Beim Solaris-killall kann man gar keinen Prozess angeben, weder per Namen noch per ID. Es wird zum Beenden gnadenlos aller Prozesse beim Herunterfahren verwendet.
SuSE 12.3 kernel 3.7.10-1.16-desktop, K Desktop Environment Version 4.10.5 r1 - Medion Titanium Aldi v. 03/2009

Benutzeravatar
TomcatMJ
Guru
Guru
Beiträge: 2480
Registriert: 1. Apr 2004, 00:29
Wohnort: Köln
Kontaktdaten:

Beitrag von TomcatMJ » 8. Sep 2005, 13:10

Zitat aus der killall manapge:
DESCRIPTION
killall sends a signal to all processes running any of the specified
commands. If no signal name is specified, SIGTERM is sent.

Signals can be specified either by name (e.g. -HUP) or by number (e.g.
-1).
"killall -l" ergibt dazu folgendes:
rashnu@Kickbox:~> killall -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
UNUSED
rashnu@Kickbox:~>
Im übrigen hab ich

Code: Alles auswählen

killall -9 ut2004-bin 
( ich benutze lieber direkt die Signalnummern da dadurch die Vertipperwahrscheinlichkeit gesenkt ist und das ganze etwas kürzer ist*G* ) schon öfters erfolgreich genutzt um versehentlich mehrfach gestartete UT 2004 Instanzen zu erschiessen *G*

Bis denne,
Tom
Edit:P.S.: @spunti: Wieso sollte -KILL beim kill-Befehl gehen? Dort heisst es -SIGKILL und beim killall heisst es -KILL ..... Ergo: Du gibst etwas zu was es nicht gibt??

Benutzeravatar
spunti
Hacker
Hacker
Beiträge: 598
Registriert: 6. Mai 2004, 10:49

Beitrag von spunti » 8. Sep 2005, 13:14

gut, jetzt bin ich zufrieden. steht also doch indirekt in der manpage.

(funktioniert nämlich auch ohne und dann frag ich mich schon, was der quatsch soll, wenns nicht mal in der manpage steht, wie ich dachte.)

danke
spunti

Benutzeravatar
TomcatMJ
Guru
Guru
Beiträge: 2480
Registriert: 1. Apr 2004, 00:29
Wohnort: Köln
Kontaktdaten:

Beitrag von TomcatMJ » 8. Sep 2005, 13:21

Klar funktionierts meistens auch ohne, nur sendet killall dann kein KILL sondern ein TERM Signal per default an den Prozess. Wenn ein Prozess darauf nicht reagiert hilft oft aber nur noch ein explizites KILL Signal weiter...und wenn auch das nicht hilft nur ein temporärer Runlevelwechsel (z.b. aus Runlevel 5 mal kurz auf 3 und wieder zurück) oder gar ein Reboot weiter.

Bis denne,
Tom (der zum Glück nur sehr sehr selten auf Zombie-Jagd ins System gehen muss*G*)

HaukeW
Member
Member
Beiträge: 189
Registriert: 30. Jan 2005, 14:39
Wohnort: Hamburg
Kontaktdaten:

Beitrag von HaukeW » 8. Sep 2005, 15:29

Jedenfalls klappt´s großartig.

Ich genieße es jedesmal geradezu, das Script ~/kill.sh

Code: Alles auswählen

killall -KILL wine
xrandr -s 0
auszuführen, weil ich genau weiß, dass ich unter Windows
STRG-ALT-ENTF hätte drücken müssen, zum Prozess runterscrollen, anklicken, auf "beenden" klicken - hoffen, dass es geht - danach Rechtsklick auf den Desktop, Eigenschaften, Auflösung wieder hochstellen.
hätte machen müssen.

Vielen Dank nochmal :)
System: SuSE 11.3
AMD Athlon 3500+
Asus Mainboard
Soundblaster audigy2
Nvidia GeForce 8600
Festplatte+DVD-Brenner
----
eingetragener Linux-User #391592
http://counter.li.org

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste