Hướng dẫn run exec in background php - chạy thực thi trong php nền

21

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi đang cố gắng xử lý một tệp trong nền với lệnh sau, nhưng nó không làm gì cả.

exec("php csv.php $file $user > /dev/null &", $output);

Nếu tôi xóa > /dev/null & thì các quy trình tệp, nhưng không phải trong nền.

exec("php csv.php $file $user", $output);

Bất kỳ ý tưởng?

hỏi ngày 28 tháng 1 năm 2013 lúc 5:30Jan 28, 2013 at 5:30

Hướng dẫn run exec in background php - chạy thực thi trong php nền

2

Note:

Nếu một chương trình được bắt đầu với chức năng này, để nó tiếp tục chạy ở chế độ nền, đầu ra của chương trình phải được chuyển hướng đến một tệp hoặc luồng đầu ra khác. Không làm như vậy sẽ khiến PHP bị treo cho đến khi việc thực hiện chương trình kết thúc.

http://php.net/manual/en/function.exec.php

so:

exec("php csv.php $file $user > /dev/null &"); // no $output

Đã trả lời ngày 28 tháng 1 năm 2013 lúc 5:38Jan 28, 2013 at 5:38

Hướng dẫn run exec in background php - chạy thực thi trong php nền

Vua vua EmeryEmery King

3,47021 huy hiệu bạc34 huy hiệu đồng21 silver badges34 bronze badges

9

Bạn đã xem xét sử dụng màn hình chưa? Bạn có thể bắt đầu một phiên màn hình chạy trong một quy trình tách ra. Đầu ra sẽ đi đến phiên màn hình, mà bạn có thể gắn lại trong một thiết bị đầu cuối khác trong khi nó vẫn đang chạy.

exec("screen -d -m -S my_php_session csv.php $file $user", $output);

Đã trả lời ngày 11 tháng 10 năm 2015 lúc 0:29Oct 11, 2015 at 0:29

Moodboommoodboommoodboom

5.6852 Huy hiệu vàng38 Huy hiệu bạc44 Huy hiệu đồng2 gold badges38 silver badges44 bronze badges

Ngoài câu trả lời của Emery King, bạn phải sử dụng một cuộc gọi exec() duy nhất để tiêu diệt một quy trình nền. Lúc đầu, tôi đã có ấn tượng rằng nếu quá trình được đưa vào nền, tôi có thể đi theo cách vui vẻ của mình và giết nó sau này miễn là tôi có ID quy trình, nhưng đó không phải là trường hợp.

Ví dụ:

// Runs the background process for 10 seconds
// and then kills it and allows php to continue
exec('sh -c \'echo $$ > pid; exec long_running_process\' > /dev/null 2>&1 & sleep 10 && kill $(cat pid)');

// Runs the background process but does not allow
// php to continue until the background process finishes.
exec('sh -c \'echo $$ > pid; exec long_running_process\' > /dev/null 2>&1 &');
exec(' sleep 10 && kill $(cat pid)'); // <- does not execute until background process is done (at which point pid is already dead)
  • exec("php csv.php $file $user", $output);
    
    0 ghi ID quy trình của
    exec("php csv.php $file $user", $output);
    
    1 vào một tệp có tên
    exec("php csv.php $file $user", $output);
    
    2.

  • exec("php csv.php $file $user", $output);
    
    3 Chuyển hướng STDOUT và STDERR sang
    exec("php csv.php $file $user", $output);
    
    4 và đặt
    exec("php csv.php $file $user", $output);
    
    1 vào nền.

  • exec("php csv.php $file $user", $output);
    
    6 đợi 10 giây trước khi giết quá trình ID ai có trong tệp
    exec("php csv.php $file $user", $output);
    
    2.

Đã trả lời ngày 30 tháng 7 năm 2021 lúc 4:23Jul 30, 2021 at 4:23

Hướng dẫn run exec in background php - chạy thực thi trong php nền

Stack Underflowstack Dòng chảyStack Underflow

2.1492 Huy hiệu vàng25 Huy hiệu bạc45 Huy hiệu Đồng2 gold badges25 silver badges45 bronze badges

PHP có thể chạy trong nền không? background process and why do we need them?

Trong PHP, chúng tôi không thể trực tiếp chạy bất kỳ công việc quy trình nào trong nền ngay cả khi công việc cha mẹ chấm dứt.

Có rất nhiều cách để điều hành một công việc trong nền. Crontab, đa luồng trong java, các thói quen đi trong golang là những ví dụ về các trường hợp như vậy. & Nbsp;

Để chạy một quy trình trong Ubuntu, chúng tôi chỉ cần nhập một lệnh trên thiết bị đầu cuối. Ví dụ: để chạy tệp PHP, chúng tôi sử dụng lệnh sau:

php filename.php

Trong PHP, chúng tôi không thể trực tiếp chạy bất kỳ công việc quy trình nào trong nền ngay cả khi công việc cha mẹ chấm dứt. Trước khi chúng ta biết cách chạy quy trình trong nền, hãy để chúng biết cách thực thi các lệnh đầu cuối từ tập lệnh hoặc chương trình PHP. Để đạt được chức năng này, chúng ta có thể sử dụng các hàm EXEC và shell_EXEC trong PHP.exec and shell_exec functions in PHP.

Một lệnh mẫu để chạy bất kỳ lệnh nào với PHP là:

PHP

exec("php csv.php $file $user", $output);
8

exec("php csv.php $file $user", $output);
9
exec("php csv.php $file $user > /dev/null &"); // no $output
0
exec("php csv.php $file $user > /dev/null &"); // no $output
1
exec("php csv.php $file $user > /dev/null &"); // no $output
2223
exec("php csv.php $file $user > /dev/null &"); // no $output
4

exec("php csv.php $file $user > /dev/null &"); // no $output
5

Có những điểm quan trọng của mã trên:

  • Đầu ra (stdout) của tập lệnh phải được chuyển đến một tệp. /dev/null chỉ ra rằng chúng tôi không ghi nhật ký đầu ra.
  • Các lỗi (STDERR) cũng phải được chuyển đến một tệp. 2> & 1 có nghĩa là stderr được chuyển hướng vào stdout và do đó vào niết bàn.
  • Chung kết & bảo lệnh thực thi trong nền. execute in the background.

& nbsp; chúng ta có thể kiểm tra trạng thái của bất kỳ quy trình đang chạy nào với lệnh PS, ví dụ:

ps -ef

Vì vậy, để chạy bất kỳ quy trình nền nào từ PHP, chúng tôi chỉ có thể sử dụng chức năng EXEC hoặc shell_EXEC để thực thi bất kỳ lệnh đầu cuối nào và trong lệnh đó, chúng tôi chỉ cần thêm và vào cuối cùng để quá trình có thể chạy ở chế độ nền.

Dưới đây là việc thực hiện phương pháp trên:

PHP

exec("php csv.php $file $user > /dev/null &"); // no $output
6

Is

exec("screen -d -m -S my_php_session csv.php $file $user", $output);
5
exec("screen -d -m -S my_php_session csv.php $file $user", $output);
6
exec("screen -d -m -S my_php_session csv.php $file $user", $output);
7

exec("screen -d -m -S my_php_session csv.php $file $user", $output);
8
exec("screen -d -m -S my_php_session csv.php $file $user", $output);
9
// Runs the background process for 10 seconds
// and then kills it and allows php to continue
exec('sh -c \'echo $$ > pid; exec long_running_process\' > /dev/null 2>&1 & sleep 10 && kill $(cat pid)');

// Runs the background process but does not allow
// php to continue until the background process finishes.
exec('sh -c \'echo $$ > pid; exec long_running_process\' > /dev/null 2>&1 &');
exec(' sleep 10 && kill $(cat pid)'); // <- does not execute until background process is done (at which point pid is already dead)
0

exec("screen -d -m -S my_php_session csv.php $file $user", $output);
8
exec("php csv.php $file $user > /dev/null &"); // no $output
9
// Runs the background process for 10 seconds
// and then kills it and allows php to continue
exec('sh -c \'echo $$ > pid; exec long_running_process\' > /dev/null 2>&1 & sleep 10 && kill $(cat pid)');

// Runs the background process but does not allow
// php to continue until the background process finishes.
exec('sh -c \'echo $$ > pid; exec long_running_process\' > /dev/null 2>&1 &');
exec(' sleep 10 && kill $(cat pid)'); // <- does not execute until background process is done (at which point pid is already dead)
0

exec("screen -d -m -S my_php_session csv.php $file $user", $output);
8
exec("screen -d -m -S my_php_session csv.php $file $user", $output);
1

exec("screen -d -m -S my_php_session csv.php $file $user", $output);
5
exec("php csv.php $file $user > /dev/null &"); // no $output
4

// Runs the background process for 10 seconds
// and then kills it and allows php to continue
exec('sh -c \'echo $$ > pid; exec long_running_process\' > /dev/null 2>&1 & sleep 10 && kill $(cat pid)');

// Runs the background process but does not allow
// php to continue until the background process finishes.
exec('sh -c \'echo $$ > pid; exec long_running_process\' > /dev/null 2>&1 &');
exec(' sleep 10 && kill $(cat pid)'); // <- does not execute until background process is done (at which point pid is already dead)
8
// Runs the background process for 10 seconds
// and then kills it and allows php to continue
exec('sh -c \'echo $$ > pid; exec long_running_process\' > /dev/null 2>&1 & sleep 10 && kill $(cat pid)');

// Runs the background process but does not allow
// php to continue until the background process finishes.
exec('sh -c \'echo $$ > pid; exec long_running_process\' > /dev/null 2>&1 &');
exec(' sleep 10 && kill $(cat pid)'); // <- does not execute until background process is done (at which point pid is already dead)
9
php filename.php
0

exec("screen -d -m -S my_php_session csv.php $file $user", $output);
8
php filename.php
2
exec("screen -d -m -S my_php_session csv.php $file $user", $output);
6
php filename.php
4

php filename.php
5

exec("php csv.php $file $user > /dev/null &"); // no $output
8
php filename.php
7
php filename.php
4

// Runs the background process for 10 seconds
// and then kills it and allows php to continue
exec('sh -c \'echo $$ > pid; exec long_running_process\' > /dev/null 2>&1 & sleep 10 && kill $(cat pid)');

// Runs the background process but does not allow
// php to continue until the background process finishes.
exec('sh -c \'echo $$ > pid; exec long_running_process\' > /dev/null 2>&1 &');
exec(' sleep 10 && kill $(cat pid)'); // <- does not execute until background process is done (at which point pid is already dead)
9
ps -ef
0
ps -ef
1
ps -ef
2
ps -ef
3

exec("php csv.php $file $user > /dev/null &"); // no $output
5

Đầu ra

processID of process in background is: 19926
current processID is: 19924


PHP có thể chạy trong nền không?

Trong PHP, chúng tôi không thể trực tiếp chạy bất kỳ công việc quy trình nào trong nền ngay cả khi công việc cha mẹ chấm dứt.we can not directly run any process job in the background even if the parent job terminates.

Làm cách nào để chạy một quá trình trong nền?

Sử dụng BG để gửi các lệnh chạy đến nền, bạn có thể dễ dàng gửi các lệnh đó đến nền bằng cách nhấn các phím Ctrl + Z và sau đó sử dụng lệnh BG.Nhấn Ctrl + Z dừng quá trình chạy và BG đưa nó lên nền. You can easily send such commands to the background by hitting the Ctrl + Z keys and then using the bg command. Hitting Ctrl + Z stops the running process, and bg takes it to the background.

Có an toàn khi sử dụng EXEC trong PHP không?

Chức năng EXEC an toàn như bạn thực hiện.Miễn là bạn sử dụng các chức năng thoát ra thích hợp như được hiển thị ở đây, bạn sẽ tốt.Mặc dù có thể làm cho các lệnh script an toàn, một vectơ tấn công phổ biến là tải lên một tập lệnh độc hại và sử dụng các chức năng thực thi và các chức năng tương tự để hack máy chủ.. As long as you use the proper escaping functions like shown here, you'll be good. While it is possible to make the script commands safe, a common attack vector is to upload a malicious script and use exec and similar functions to hack the server.

Làm cách nào để chạy tập lệnh PHP trong phụ trợ?

Bạn có thể đặt một tác vụ (như lệnh hoặc script) trong một nền bằng cách nối thêm A & ở cuối dòng lệnh.Lệnh & Toán tử đặt lệnh vào nền và giải phóng thiết bị đầu cuối của bạn.Lệnh chạy trong nền được gọi là một công việc.Bạn có thể nhập lệnh khác trong khi lệnh nền đang chạy.appending a & at the end of the command line. The & operator puts command in the background and free up your terminal. The command which runs in background is called a job. You can type other command while background command is running.