To wygląda jak błąd w kilku powłokach, działa zgodnie z oczekiwaniami z ksh93 i zsh .
Tło:
Większość pocisków wydaje się uruchamiać pętlę while wewnątrz głównej powłoki i
Bourne Shell zawiesza całą powłokę, jeśli wpiszesz ^ Z za pomocą powłoki niezalogowanej
bash zawiesza tylko, sleep
a następnie pozostawia pętlę while na rzecz drukowania nowego polecenia powłoki
myślnik sprawia, że polecenie to nie jest zawieszalne
Z ksh93 rzeczy działają zupełnie inaczej:
ksh93 robi to samo, gdy polecenie jest uruchamiane za pierwszym razem, ale jakosleep
buitin w ksh93, ksh93 ma moduł obsługi, który powoduje, że pętla while rozwidla główną powłokę, a następnie zawiesza się podczas wpisywania ^ Z.
Jeśli wpiszesz w ksh93 później fg
, rozwidlone dziecko, które nadal uruchamia pętlę, jest kontynuowane.
Widzisz główną różnicę podczas porównywania komunikatów kontroli zadań z bash i ksh93:
raporty bash :
[1]+ Stopped sleep 1
ale raporty ksh93 :
^Z[1] + Stopped while true; do echo .; sleep 1; done
zsh zachowuje się podobnie do ksh93
W przypadku obu powłok masz jeden proces (główną powłokę), o ile nie wpiszesz ^ Z, i dwa procesy powłoki po wpisaniu ^ Z.
$?
po powrocie, i tak teżtrue
nie jesttrue
. prawdopodobnie. Myślę.