Ankündigung

Einklappen
Keine Ankündigung bisher.

Shell_exec und System-Prozesse

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Shell_exec und System-Prozesse

    Es ist mir jetzt schon zum zweiten Mal passiert, dass ich aus versehen einen falschen Befehl an ffmpeg gegeben habe. Anstatt nur einen Frame aus dem Video zu extrahieren, wird nun gerade im Hintergrund jeder Frame des Videos extrahiert.

    Das ganze betreibe ich mit PHP/Apache auf Windows mit AppServ.
    Der Aufruf von ffmpeg erfolgte mit shell_exec() von einer PHp-Datei aus.

    Meine Frage nun: Warum taucht ffmpeg nicht unter den laufenden Windows Prozessen auf?

    - Ich habe den Ladevorgang im Browser abgebrochen.
    - Ich habe den Browser geschlossen.
    - Ich habe Apache neu gestartet.

    Das Ding läuft immer noch.
    PHP taucht ebenso nicht im Windows Task Manager auf.

    Und wie beende ich diesen Prozess?


  • #2
    1) wie startest du geanu ?
    2) wenn du das via exec/system/etc spawnst! wird imho wohl nicht als php-prozess laufen sondern als eigenständiger laufen
    3) mal task nach cpu-last oder i/o-last sortiert und geschaut was da am meisten zieht ?
    robo47.net - Blog, Codeschnipsel und mehr
    | Caching-Klassen und Opcode Caches in php | Robo47 Components - PHP Library extending Zend Framework

    Kommentar


    • #3
      1) shell_exec("ffmpeg ...");
      3) Ich konnte nichts auffälliges erkennen.

      Der Prozess ist mittlerweile durch. Wird hoffentlich nicht noch mal passieren.
      Trotzdem finde ich es bedenklich.
      Wie beende ich das denn, wenn es noch einmal passiert?

      Kommentar


      • #4
        Wie wäre es wenn du zum "testen" mit nem dummy arbeitest ? ner binary/shellscript in einer sprache deiner wahl (php, batch, vb, ... ) die dir einfach nur die übergebenen parameter ausgibt damit du siehst was wie ankommt ?

        Betreffs dem kill-problem, ideallerweise über die PID, unter Linux würdest du ganz einfach den prozess spawnen und du dir ganz einfach die pid zurückgeben lassen via shell z.b. so wie hier beschrieben:

        PHP: exec - Manual

        Wie man das unter Windows macht weis ich nicht, musst mal schauen ob es da tools gibt die dir die pid eines prozesses den sie selbst starten zurückgeben oder so, sprich du lässt ein programm das du via system_exec aufrufst dein ffmpeg aufrufen und das gibt dir dafür die pid zurück und darüber kannst du den prozess dann jeder zeit killen.
        robo47.net - Blog, Codeschnipsel und mehr
        | Caching-Klassen und Opcode Caches in php | Robo47 Components - PHP Library extending Zend Framework

        Kommentar


        • #5
          Das ist ein netter Code-Schnipsel. Denke jedoch nicht, dass ich den verwenden kann (aufgrund der Sicherheit).

          Ich bin mit ffmpeg sowieso gerade am verzweifeln. Was ein Kack! Die Seek-Option "-ss" funktioniert extrem schlecht. Das Programm braucht ewig lange, bis er an der Stelle ankommt, von der ich einen Framegrab haben will. Mit Mplayer dauern 20 Framegrabs nur 15 Sekunden, mit FFmpeg 15 Minuten und länger!
          Ich habe mittlerweile alle Kommandozeilen-Parameter von ffmpeg ausprobiert. Werde wohl die Unterstützung von FFmpeg ganz aus meiner Anwendung entfernen müssen.

          Kommentar


          • #6
            1) Unter Windows kannst du das genau so wohl eh nicht verwenden, wenn überhaupt nur via umweg über cygwin, weil das shell-spezifische syntax ist
            2) Was meinst du mit "aufgrund der Sicherheit" ?
            robo47.net - Blog, Codeschnipsel und mehr
            | Caching-Klassen und Opcode Caches in php | Robo47 Components - PHP Library extending Zend Framework

            Kommentar

            Lädt...
            X