Dlaczego „php x.php &” prowadzi do zatrzymania procesu w tle

2

x.php:

<?php
sleep(15);
?>

konsola:

$ php x.php &
[1] 5742
[1]+  Stopped                 x.php

Wynik: proces „ZATRZYMANY” - trwa wiecznie, dopóki nie wyślę a, TERMa następnie CONTzasygnalizuję.

Czego potrzebuję zamiast tego: proces kończący się i kończący po 15 sekundach, więc nie widzę go w toplub htop.

System: Ubuntu 12.04 LTS w VirtualBox; php-fpm

Meglio
źródło
W rzeczywistości nie chodzi o „jak coś zakodować”, ale o „jak uruchomić mój skrypt w tle”, co bardziej przypomina pytanie związane z „zaawansowanymi użytkownikami”, jak podano w przewodniku po witrynie. Re: co próbujesz zrobić - to opisano w paragrafie „Zamiast tego potrzebuję”.
Meglio
1
Czy jest coś więcej X.php, czy zapomniałeś zamknąć tag PHP w przykładzie?
ᴇcʜιᴇ007
Nic innego w pliku x.php (jest dozwolone i zalecane jest pominięcie tagu zamykającego). Naprawiono moje pytanie, aby uniknąć zamieszania.
Meglio
Dlaczego chcesz to zrobić? Łatwiej byłoby po prostu uruchomić sleep 15zamiast php.
Kevin Panko
@KevinPanko Skrypt PHP jest tylko minimalnym przykładem używanym do uproszczonego testowania i publikowania na tej stronie - został użyty zamiast prawdziwego skryptu konia pociągowego.
Meglio

Odpowiedzi:

4

Za pomocą straceWidzę, że program otrzymuje sygnał, SIGTTOUco oznacza, że ​​proces był w tle i próbował zapisać w terminalu, lub w tym przypadku zmienić jeden z jego trybów.

ioctl(0, SNDCTL_TMR_STOP or SNDRV_TIMER_IOCTL_GINFO or TCSETSW, {B38400 opost isig icanon echo ...}) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGTTOU {si_signo=SIGTTOU, si_code=SI_KERNEL} ---
--- stopped by SIGTTOU ---

Aby obejść ten problem, ustaw wartość wejściową na null:

$ php x.php < /dev/null &

Pytanie jest takie samo jak to: skrypt PHP nie będzie działał w tle

Kevin Panko
źródło