167 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			167 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Safe;
 | |
| 
 | |
| use Safe\Exceptions\PcntlException;
 | |
| 
 | |
| /**
 | |
|  * Executes the program with the given arguments.
 | |
|  *
 | |
|  * @param string $path path must be the path to a binary executable or a
 | |
|  * script with a valid path pointing to an executable in the shebang (
 | |
|  * #!/usr/local/bin/perl for example) as the first line.  See your system's
 | |
|  * man execve(2) page for additional information.
 | |
|  * @param array $args args is an array of argument strings passed to the
 | |
|  * program.
 | |
|  * @param array $envs envs is an array of strings which are passed as
 | |
|  * environment to the program.  The array is in the format of name => value,
 | |
|  * the key being the name of the environmental variable and the value being
 | |
|  * the value of that variable.
 | |
|  * @throws PcntlException
 | |
|  *
 | |
|  */
 | |
| function pcntl_exec(string $path, array $args = null, array $envs = null): void
 | |
| {
 | |
|     error_clear_last();
 | |
|     if ($envs !== null) {
 | |
|         $result = \pcntl_exec($path, $args, $envs);
 | |
|     } elseif ($args !== null) {
 | |
|         $result = \pcntl_exec($path, $args);
 | |
|     } else {
 | |
|         $result = \pcntl_exec($path);
 | |
|     }
 | |
|     if ($result === false) {
 | |
|         throw PcntlException::createFromPhpError();
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * pcntl_getpriority gets the priority of
 | |
|  * pid. Because priority levels can differ between
 | |
|  * system types and kernel versions, please see your system's getpriority(2)
 | |
|  * man page for specific details.
 | |
|  *
 | |
|  * @param int $pid If not specified, the pid of the current process is used.
 | |
|  * @param int $process_identifier One of PRIO_PGRP, PRIO_USER
 | |
|  * or PRIO_PROCESS.
 | |
|  * @return int pcntl_getpriority returns the priority of the process.  A lower numerical value causes more favorable
 | |
|  * scheduling.
 | |
|  * @throws PcntlException
 | |
|  *
 | |
|  */
 | |
| function pcntl_getpriority(int $pid = null, int $process_identifier = PRIO_PROCESS): int
 | |
| {
 | |
|     error_clear_last();
 | |
|     if ($process_identifier !== PRIO_PROCESS) {
 | |
|         $result = \pcntl_getpriority($pid, $process_identifier);
 | |
|     } elseif ($pid !== null) {
 | |
|         $result = \pcntl_getpriority($pid);
 | |
|     } else {
 | |
|         $result = \pcntl_getpriority();
 | |
|     }
 | |
|     if ($result === false) {
 | |
|         throw PcntlException::createFromPhpError();
 | |
|     }
 | |
|     return $result;
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * pcntl_setpriority sets the priority of
 | |
|  * pid.
 | |
|  *
 | |
|  * @param int $priority priority is generally a value in the range
 | |
|  * -20 to 20. The default priority
 | |
|  * is 0 while a lower numerical value causes more
 | |
|  * favorable scheduling.  Because priority levels can differ between
 | |
|  * system types and kernel versions, please see your system's setpriority(2)
 | |
|  * man page for specific details.
 | |
|  * @param int $pid If not specified, the pid of the current process is used.
 | |
|  * @param int $process_identifier One of PRIO_PGRP, PRIO_USER
 | |
|  * or PRIO_PROCESS.
 | |
|  * @throws PcntlException
 | |
|  *
 | |
|  */
 | |
| function pcntl_setpriority(int $priority, int $pid = null, int $process_identifier = PRIO_PROCESS): void
 | |
| {
 | |
|     error_clear_last();
 | |
|     if ($process_identifier !== PRIO_PROCESS) {
 | |
|         $result = \pcntl_setpriority($priority, $pid, $process_identifier);
 | |
|     } elseif ($pid !== null) {
 | |
|         $result = \pcntl_setpriority($priority, $pid);
 | |
|     } else {
 | |
|         $result = \pcntl_setpriority($priority);
 | |
|     }
 | |
|     if ($result === false) {
 | |
|         throw PcntlException::createFromPhpError();
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * The pcntl_signal_dispatch function calls the signal
 | |
|  * handlers installed by pcntl_signal for each pending
 | |
|  * signal.
 | |
|  *
 | |
|  * @throws PcntlException
 | |
|  *
 | |
|  */
 | |
| function pcntl_signal_dispatch(): void
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \pcntl_signal_dispatch();
 | |
|     if ($result === false) {
 | |
|         throw PcntlException::createFromPhpError();
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * The pcntl_sigprocmask function adds, removes or sets blocked
 | |
|  * signals, depending on the how parameter.
 | |
|  *
 | |
|  * @param int $how Sets the behavior of pcntl_sigprocmask. Possible
 | |
|  * values:
 | |
|  *
 | |
|  * SIG_BLOCK: Add the signals to the
 | |
|  * currently blocked signals.
 | |
|  * SIG_UNBLOCK: Remove the signals from the
 | |
|  * currently blocked signals.
 | |
|  * SIG_SETMASK: Replace the currently
 | |
|  * blocked signals by the given list of signals.
 | |
|  *
 | |
|  * @param array $set List of signals.
 | |
|  * @param array|null $oldset The oldset parameter is set to an array
 | |
|  * containing the list of the previously blocked signals.
 | |
|  * @throws PcntlException
 | |
|  *
 | |
|  */
 | |
| function pcntl_sigprocmask(int $how, array $set, ?array &$oldset = null): void
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \pcntl_sigprocmask($how, $set, $oldset);
 | |
|     if ($result === false) {
 | |
|         throw PcntlException::createFromPhpError();
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  *
 | |
|  *
 | |
|  * @param int $errno
 | |
|  * @return string Returns error description on success.
 | |
|  * @throws PcntlException
 | |
|  *
 | |
|  */
 | |
| function pcntl_strerror(int $errno): string
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \pcntl_strerror($errno);
 | |
|     if ($result === false) {
 | |
|         throw PcntlException::createFromPhpError();
 | |
|     }
 | |
|     return $result;
 | |
| }
 |