Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

766
Views
Si tengo un script de Python que comencé en PHP desde un servidor web, ¿cómo lo detengo?

Tengo un servidor web Apache en mi RaspberryPi 4 que tiene un programa escrito en Python que activará una matriz de 8x8 de LED rojos. Tengo una página HTML y PHP en el servidor web para poder ejecutar ese script de forma remota. El HTML es solo 2 botones y al presionar el botón va a este programa PHP:

 <?php ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); if ($_SERVER['REQUEST_METHOD'] == "POST" and isset($_POST['on'])) { lightOn(); } elseif ($_SERVER['REQUEST_METHOD'] == "POST" and isset($_POST['off'])) { lightOff(); } function lightOn() { $command = escapeshellcmd('sudo python3 led_display.py'); $output = shell_exec($command); header('Location: index.html'); exit; } function lightOff() { $command = escapeshellcmd(''); $output = shell_exec($command); header('Location: index.html'); exit; } ?>

Este programa PHP solo reconoce cuál de los 2 botones se presionó y, al presionarlo, ejecuta una función. Para la función lightOn() es simple, ya que solo ejecuto el script que controla la matriz de LED de 8x8. Sin embargo, quiero que el usuario pueda detener el script en cualquier momento presionando el otro botón. En una interfaz de línea de comando normal, escribiría 'Control + c' para detener cualquier script en ejecución. ¿Cómo lograría eso en PHP a través de shell_exec o cualquier otro método?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

En su servidor, descubra cuál es la identificación del proceso (PID) a través de los comandos ps , top o incluso htop . Entonces puedes matarlo con el comando kill {pid_number} .

Algo como:

 $ ps aux | grep led_display # the first number that appears is the PID. let's assume it's 1234 $ kill 1234
over 4 years ago · Santiago Trujillo Report

0

Suponiendo que tiene control sobre el archivo sudoers y sabe cómo hacerlo para que el proceso de su servidor web pueda ejecutar el comando al que se hace referencia en lightOff sin una contraseña, debería poder hacerlo

 $command = escapeshellcmd('sudo pkill -TERM led_display.py');

Por supuesto, eso terminaría CUALQUIER proceso llamado led_display.py , no solo el que inició desde el proceso del servidor web.

EDITAR:

¿Qué sucede si pones en segundo plano el proceso?

 $command = escapeshellcmd('sudo python3 led_display.py > /dev/null 2>&1 &');
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!