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


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.