Czasami, jakiś czas po tym, jak stworzyłem proces bg
w tle w trybie bash, kiedy naciskam Enter w tej samej powłoce, aby ponownie wyświetlić monit (tylko po to, aby sprawdzić, czy nadal jestem w bash, gdy wyświetlane są dane wyjściowe z procesu w tle), proces w tle wydaje się kończyć spontanicznie.
Jeśli bg
powtórzę, ten sam problem się powtórzy.
Wydaje się, że to jedyny sposób, aby to naprawić fg
.
Dlaczego to się dzieje?
terminal
io
job-control
background-process
Robin Green
źródło
źródło
Odpowiedzi:
Zwykle dzieje się tak, gdy proces próbuje odczytać ze swojego
stdin
strumienia. Gdy proces jest w tle, odbiera sygnał TTIN i jest w ten sposób zamrożony (to samo zachowanie, co sygnał STOP). Istnieje również podwójny sygnał TTOU, gdy proces w tle próbuje zapisać na swoim terminalu.Przeniesienie go na pierwszy plan wznawia proces i pozwala na odczyt z terminala.
Próbny:
Jednym ze sposobów uniknięcia tego jest użycie
nohup
, ale może to mieć dziwne efekty, jeśli program nie poradzi sobie z przekierowaniem strumienia wejściowego/dev/null
.źródło