Запуск процесса в фоновом режиме на висит PHP-страница

У меня есть страница PHP, которая запускает скрипт python, но страница PHP зависает до завершения скрипта. Есть ли способ запустить скрипт, который не заставит его висеть?

PHP-код

Проблема возникает в случае alarm_on. Все остальные случаи работают нормально.

<?php session_start(); if(isset($_COOKIE['userME'])) echo "Hello, ".$_COOKIE['userME'].'<br>'; if(isset($_SESSION['UserData']['Username']) || $passed )// or $logins[$Username] == $Password) { if (isset($_POST['submit'])) { switch ($_POST['submit']) { case 'room_light': echo shell_exec("sudo python /home/pi/Desktop/PiControl/room_light.py"); break; case 'alarm_on': echo "alarm started"; shell_exec("nohup sudo python /home/pi/Desktop/PiControl/motion_sensor.py &"); echo "alarm on"; break; case 'alarm_off': echo "alarm off"; echo shell_exec("sudo pkill -f motion_sensor.py"); break; } } ?> <form method="post"> <input type="submit" name="submit" value="room_light"> <input type="submit" name="submit" value="alarm_on"> <input type="submit" name="submit" value="alarm_off"> </form> <?php } else { header("location:login.php"); } ?> 

motion_sensor.py

 import sys import urllib2, urllib import RPi.GPIO as GPIO #setup GPIO using Board numbering. pin physical number corresponds to gpio call GPIO.setmode(GPIO.BOARD) pin=37 url="http://MY_IP/test.php" GPIO.setup(pin, GPIO.IN) def alarmChange(channel): if(GPIO.input(pin)): print 'Sensor tripped',channel postdata={'sensor_tripped': channel} postdata=urllib.urlencode(postdata) req=urllib2.Request(url, postdata) req.add_header("Content-type", "application/x-www-form-urlencoded") page=urllib2.urlopen(req).read() #print page else: print 'sensor no longer tripped', channel GPIO.add_event_detect(pin, GPIO.BOTH, callback=alarmChange) print "alarm on" while True: #this is a hack to keep the script running all the time so it will continue event detection i=0 GPIO.cleanup() #should never hit this point