Frage

Ryan Tomayko berühren ziemlich Feuersturm mit diesem Beitrag über die Verwendung von Unix-Prozesssteuerung aus Befehle.

  

Wir sollten mehr davon tun. Viel mehr davon. Ich spreche über fork (2), execve (2), Rohr (2), socket (2), wählen Sie (2), töten (2), sigaction (2), und so weiter und so fort. Das sind unsere Freunde. Sie wollen so schlecht nur uns zu helfen.

Ich habe ein Stück Code (ein delayed_job Klon für DataMapper dass ich denke, würde mit diesem Recht passen, aber ich bin mir nicht klar, wie man die Vorteile der genannten Befehle nehmen. Alle Ideen, wie den Code zu verbessern?

def start
  say "*** Starting job worker #{@name}"
  t = Thread.new do
    loop do
      delay = Update.work_off(self)
      break if $exit
      sleep delay
      break if $exit
    end
    clear_locks
  end

  trap('TERM') { terminate_with t }
  trap('INT')  { terminate_with t }

  trap('USR1') do
    say "Wakeup Signal Caught"
    t.run
  end
end
War es hilfreich?

Lösung

Ahh ja ... die Gefahren von „Wir sollten mehr davon tun“, ohne zu erklären, was jeder von denen tun und unter welchen Umständen Sie sie verwenden würde. Für so etwas wie delayed_job können Sie sogar fork verwenden, ohne zu wissen, dass Sie fork verwenden. Das heißt, es wirklich keine Rolle spielt. Ryan sprach mit fork für preforking Servern. delayed_job verwenden würde fork für einen Prozess in einen Dämon verwandeln. Gleicher Systemaufruf, verschiedene Zwecke. Laufen delayed_job im Vordergrund (ohne fork) vs im Hintergrund (mit fork) in einem vernachlässigbaren Unterschied in der Leistung führen wird.

Wenn Sie jedoch einen Server schreiben, die gleichzeitige Verbindungen akzeptiert, jetzt Ryans Rat ist, direkt auf das Geld.

  • fork: erstellt eine Kopie des ursprünglichen Prozesses
  • execve: Stoppen die aktuelle Datei ausführt und beginnt eine neue Datei im gleichen Prozess (sehr nützlich in Rake Aufgaben)
  • Ausführen
  • pipe: erzeugt ein Rohr (zwei Dateideskriptoren, ein für Lese-, ein für Schreib)
  • socketpair: wie ein Rohr, aber für Steckdosen
  • select: lassen Sie sich für einen oder mehr von mehreren Filedeskriptoren warten bereit zu sein, mit einem Timeout
  • kill: verwendet, um ein Signal an einen Prozess senden
  • sigaction: Ermöglicht das ändern, was passiert, wenn ein Prozess ein Signal
  • empfängt
scroll top