Wie gehe ich mit einem Job um, der aufhört und nicht fortgesetzt werden kann, wenn er nicht im Vordergrund steht?

691
Vi.

Neues Beispiel: mountlo (mit UML):

vi @ vi-notebook: ~ / b $ mountlo -m 16 -d / dev / uba1 / home / vi / mnt / usb -t vfat -o iocharset = utf8, allow_other & [1] 32561 vi @ vi-notebook: ~ / b $ Wenn Sie prüfen, ob ptrace die Systemrufnummern ändern kann ... OK Syscall emulation patch auf ptrace prüfen ... OK Erweiterte Syscall-Emulations-Patches für ptrace prüfen ... OK PROT_EXEC mmap in /tmp...OK prüfen Überprüfung auf den skas3-Patch im Host: - /proc/mm...not gefunden - PTRACE_FAULTINFO ... nicht gefunden - PTRACE_LDT ... nicht gefunden UML läuft im SKAS0-Modus   [1] + Gestoppt mountlo -m 16 -d / dev / uba1 / home / vi / mnt / usb -t vfat -o iocharset = utf8, allow_other vi @ vi-notebook: ~ / b $ bg [1] + mountlo -m 16 -d / dev / uba1 / home / vi / mnt / usb -t vfat -o iocharset = utf8, allow_other &  [1] + Gestoppt mountlo -m 16 -d / dev / uba1 / home / vi / mnt / usb -t vfat -o iocharset = utf8, allow_other vi @ vi-notebook: ~ / b $ bg [1] + mountlo -m 16 -d / dev / uba1 / home / vi / mnt / usb -t vfat -o iocharset = utf8, allow_other &  [1] + Gestoppt mountlo -m 16 -d / dev / uba1 / home / vi / mnt / usb -t vfat -o iocharset = utf8, allow_other vi @ vi-notebook: ~ / b $ bg [1] + mountlo -m 16 -d / dev / uba1 / home / vi / mnt / usb -t vfat -o iocharset = utf8, allow_other &  [1] + Gestoppt mountlo -m 16 -d / dev / uba1 / home / vi / mnt / usb -t vfat -o iocharset = utf8, allow_other vi @ vi-notebook: ~ / b $ fg mountlo -m 16 -d / dev / uba1 / home / vi / mnt / usb -t vfat -o iocharset = utf8, allow_other Linux-Version 2.6.15 (miko @ dorka) (gcc-Version 3.3.5 (Debian 1: 3.3.5-13)) # 1 Mon Feb 27 13:27:52 CET 2006 (normale Ausgabe) ...  vi @ vi-notebook: ~ / b $ socat - exec: 'mountlo -m 16 -d / dev / uba1 / home / vi / mnt / usb -t vfat -o iocharset = utf8 \, allow_other', pty, ctty fusermount: waitpid: Keine untergeordneten Prozesse vi @ vi-notebook: ~ / b $  

Kommt auch mit Gimp vor (wenn es Plug-Ins ausführt). Teile von Gimp wurden durch "gimp q.jpg &" eingefroren und können nicht fortgesetzt werden, es sei denn "killall-CONT" oder der Vordergrund.

Ist es ein Fehler? Wie starte ich zuverlässig Dinge im Hintergrund?

0

1 Antwort auf die Frage

0
Marnix A. van Ammers

Es ist wahrscheinlich kein Fehler. Manchmal möchte oder muss ein Programm mit der Standardeingabe (STDIN) kommunizieren. Zum Beispiel könnte es eine Frage stellen. Ein Programm kann dies jedoch nur, wenn es im Vordergrund ausgeführt wird. In diesem Fall wird die Meldung "Stopped" angezeigt. Sie können es dann mit 'fg' in den Vordergrund bringen. Manchmal funktioniert es, um die Standardeingabe von einer Datei umzuleiten, aber dann müssen Sie möglicherweise wissen, was in diese Datei eingefügt werden soll. Sie könnten versuchen, von / dev / null umzuleiten, was dem Programm immer zur Verfügung stehen sollte, auch wenn es im Hintergrund läuft. Um mit STDIN aus / dev / null umgeleitet zu werden, können Sie Folgendes tun:

$ program arg1 arg2 arg3 ... </dev/null 

Es gibt Zeiten, in denen ein Programm darauf besteht, dass STDIN ein Terminal ist. Daher funktioniert dies möglicherweise nicht und es funktioniert auch nicht, wenn das Programm Daten erwartet. Unterm Strich erwarten einige Programme, dass sie interaktiv arbeiten und im Hintergrund nicht ordnungsgemäß funktionieren.

Ja, es interagiert mit STDIN. Es kann noch keine Problemumgehung implementiert werden, damit es richtig funktioniert. "ja" "| mountlo .... `ist am nächsten. Vi. vor 14 Jahren 0