php教程 php手册 Forker 可以让 php-cli 进程借助 nohup 以守护进程的方式运行。

Forker 可以让 php-cli 进程借助 nohup 以守护进程的方式运行。

Jun 06, 2016 pm 07:39 PM
nohup 할 수 있다 프로세스

Forker可以让php-cli进程借助nohup以守护进程的方式运行。这个Forker仅仅是让进程成为守护进程,不会复制父进程的内存。 无 ?php// 运行实例,fork 10 个进程,每个进程输出一行 Im a worker ,并保存在 /tmp/forker.log 中:// CLI命令: php Forker.php 10/

Forker 可以让 php-cli 进程借助 nohup 以守护进程的方式运行。这个 Forker 仅仅是让进程成为守护进程,不会复制父进程的内存。
<?php

// 运行实例,fork 10 个进程,每个进程输出一行 Im a worker ,并保存在 /tmp/forker.log 中:
// CLI命令: php Forker.php 10
/*
if (empty($argv[1])) {
    echo "Im a worker\n";
    sleep(10);
    exit();
} else {
    $forker = new Forker('/tmp/forker.log');
    $forker->fork($forker->findCommand('php') . ' ' . __FILE__, (int)$argv[1] <= 0 ? 10 : (int)$argv[1]);
}
*/

/**
 * Forker 可以让 php-cli 进程借助 nohup 以守护进程的方式运行。
 * 这个 Forker 仅仅是让进程成为守护进程,不会复制父进程的内存。
 */
class Forker {
    
    private $nohub = '/usr/bin/nohup';
    private $out   = '/tmp/forker.log';
    
    /**
     * @param string $output 输出文件的路径。进程的标准输出将重定向到此文件
     * @throws \RuntimeException
     */
    public function __construct($output = '') {
        if (false !== ($nohup = $this->findCommand('nohup'))) {
            $this->nohub = $nohup;
        }
        if (!is_executable($this->nohub)) {
            throw new \RuntimeException('nohup not excutable');
        }
        if ($output) {
            $this->setOutput($output);
        }
    }
    
    /**
     * 设置输出文件的路径。进程的标准输出将重定向到此文件
     * @param string $file
     * @return \Forker
     * @throws \RuntimeException
     */
    public function setOutput($file) {
        if (!is_file($file)) {
            $dir = dirname($file);
            if ((!is_dir($dir) && !mkdir($dir, 0755, true)) || !is_writable($dir)) {
                throw new \RuntimeException('output is not writable, can not create output');
            }
        } else if (!is_writable($file)) {
            throw new \RuntimeException('output is not writable');
        }
        $this->out = $file;
        return $this;
    }
    
    /**
     * 获取输出文件的路径
     * @return string
     */
    public function getOutput() {
        return $this->out;
    }
    
    /**
     * 执行命令
     * @param string $command 命令。命令中的文件参数需要使用绝对路径
     * @param int $forks fork的进程数
     */
    public function fork($command, $forks = 1) {
        for ($i = 0; $i < $forks; ++$i) {
            $this->execute($command);
        }
    }
    
    /**
     * 根据当前环境查找命令的绝对路径
     * @param string $name
     * @return boolean
     */
    public function findCommand($name) {
        $file = trim(exec("which {$name}"));
        if (is_file($file) && is_executable($file)) {
            return $file;
        }
        return false;
    }
    
    /**
     * 执行命令,成功返回 true,失败返回 false
     * @param string $command
     * @return boolean
     */
    private function execute($command) {
        $lines = [];
        $code  = 0;
        exec("{$this->nohub} {$command} >> {$this->out} 2>&1 &", $lines, $code);
        if (0 !== (int)$code) {
            file_put_contents($this->out, "fork {$command} FAILD[{$code}]:\n" . implode("\n", $lines) . "\n", FILE_APPEND);
            return false;
        }
        file_put_contents($this->out, "fork {$command} OK\n", FILE_APPEND);
        return true;
    }
    
}
로그인 후 복사
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

explorer.exe 프로세스가 무엇인지 설명하세요. explorer.exe 프로세스가 무엇인지 설명하세요. Feb 18, 2024 pm 12:11 PM

explorer.exe는 어떤 프로세스인가요? 우리는 Windows 운영체제를 사용하다 보면 "explorer.exe"라는 용어를 자주 듣게 됩니다. 이 기사에서는 explorer.exe 프로세스가 무엇인지, 그 기능과 효과에 대해 자세히 설명합니다. 우선 explorer.exe는 Windows 운영체제의 핵심 프로세스로 Windows 탐색기(Window)를 관리하고 제어하는 ​​역할을 합니다.

COM대리인의 절차는 어떻게 되나요? COM대리인의 절차는 어떻게 되나요? Sep 14, 2022 pm 02:56 PM

"com surrogate"는 "C:\Windows\System32\dllhost.exe"의 프로세스입니다. 이 프로세스가 발생하면 일반적으로 이 프로세스가 많은 공간을 차지하며 작동하지 않는다는 의미입니다. 컴퓨터가 파일 아이콘을 로드하는 중이기 때문에 컴퓨터가 멈추는 경우가 있습니다. 컴퓨터 속성 설정에서 문제를 해결할 수 있습니다.

ccsvchst.exe는 어떤 프로세스인가요? ccsvchst.exe는 어떤 프로세스인가요? Feb 19, 2024 pm 11:33 PM

ccsvchst.exe는 SEP(Symantec Endpoint Protection) 소프트웨어의 일부인 공통 프로세스 파일이며, SEP는 잘 알려진 네트워크 보안 회사인 Symantec이 개발한 엔드포인트 보호 솔루션입니다. 소프트웨어의 일부로 ccsvchst.exe는 SEP 관련 프로세스를 관리하고 모니터링하는 역할을 담당합니다. 먼저 SymantecEndpointProtection(

Linux에서 좀비 프로세스를 올바르게 종료하는 방법 Linux에서 좀비 프로세스를 올바르게 종료하는 방법 Feb 19, 2024 am 10:40 AM

Linux 시스템에서 좀비 프로세스는 종료되었지만 여전히 시스템에 남아 있는 특수 프로세스입니다. 좀비 프로세스는 리소스를 많이 소모하지 않지만 너무 많으면 시스템 리소스가 고갈될 수 있다. 이 기사에서는 시스템의 정상적인 작동을 보장하기 위해 좀비 프로세스를 올바르게 제거하는 방법을 소개합니다. 1Linux 좀비 프로세스 자식 프로세스가 작업을 완료한 후 부모 프로세스가 제때에 상태를 확인하지 않으면 자식 프로세스는 좀비 프로세스가 됩니다. 하위 프로세스는 상위 프로세스의 확인을 기다리고 있으며 시스템은 완료될 때까지 이를 재활용하지 않습니다. 그렇지 않으면 좀비 프로세스가 시스템에서 계속 정지됩니다. 시스템에 좀비 프로세스가 있는지 확인하려면 top 명령을 실행하여 실행 중인 모든 프로세스와 가능한 좀비 프로세스를 볼 수 있습니다. 'top' 명령의 결과는 Linux의 위 그림에서 확인할 수 있습니다.

Windows 11에서 작업 관리자 프로세스 업데이트를 중지하고 작업을 더 쉽게 종료하는 방법 Windows 11에서 작업 관리자 프로세스 업데이트를 중지하고 작업을 더 쉽게 종료하는 방법 Aug 20, 2023 am 11:05 AM

Windows 11 및 Windows 10에서 작업 관리자 프로세스 업데이트를 일시 중지하는 방법 CTRL+창 키+Delete를 눌러 작업 관리자를 엽니다. 기본적으로 작업 관리자는 프로세스 창을 엽니다. 여기에서 볼 수 있듯이 모든 앱은 끝없이 돌아다니기 때문에 선택하려고 할 때 아래로 가리키는 것이 어려울 수 있습니다. 따라서 CTRL을 길게 누르면 작업 관리자가 일시 중지됩니다. 여전히 앱을 선택하고 아래로 스크롤할 수도 있지만 항상 CTRL 버튼을 누르고 있어야 합니다.

Linux 프로세스 우선순위 조정 방법에 대한 자세한 설명 Linux 프로세스 우선순위 조정 방법에 대한 자세한 설명 Mar 15, 2024 am 08:39 AM

Linux 프로세스 우선순위 조정 방법에 대한 자세한 설명 Linux 시스템에서는 프로세스의 우선순위에 따라 시스템의 실행 순서와 리소스 할당이 결정됩니다. 프로세스의 우선순위를 합리적으로 조정하면 시스템의 성능과 효율성을 향상시킬 수 있습니다. 이 기사에서는 Linux에서 프로세스 우선순위를 조정하는 방법을 자세히 소개하고 구체적인 코드 예제를 제공합니다. 1. 프로세스 우선순위 개요 Linux 시스템에서 각 프로세스에는 그에 연관된 우선순위가 있습니다. 우선순위 범위는 일반적으로 -20~19입니다. 여기서 -20은 가장 높은 우선순위를 나타내고 19는

노흡의 기능 및 원리 분석 노흡의 기능 및 원리 분석 Mar 25, 2024 pm 03:24 PM

nohup의 역할과 원리 분석 nohup은 유닉스 및 유닉스 계열 운영체제에서 사용자가 현재 세션을 종료하거나 터미널 창을 닫아도 백그라운드에서 명령을 실행하는 데 일반적으로 사용되는 명령입니다. 아직도 계속 처형되고 있다. 이번 글에서는 nohup 명령의 기능과 원리를 자세히 분석해보겠습니다. 1. nohup의 역할: 백그라운드에서 명령 실행: nohup 명령을 통해 사용자가 터미널 세션을 종료해도 영향을 받지 않고 장기 실행 명령이 백그라운드에서 계속 실행되도록 할 수 있습니다. 이건 실행해야 해

nohup 명령 실행 후 종료하는 방법 nohup 명령 실행 후 종료하는 방법 Mar 18, 2024 pm 03:00 PM

네 가지 방법: 프로세스 ID(PID)를 찾아 "kill" 명령을 사용하여 프로세스를 종료합니다. "killall" 명령을 사용하여 모든 "nohup" 프로세스를 종료합니다(주의해서 사용). "nohup.out" 파일에서 관련 정보를 확인합니다. . 이러한 방법을 통해 사용자는 "nohup" 명령으로 백그라운드에서 실행되는 작업을 효과적으로 종료할 수 있습니다.

See all articles