The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

Name

SPVM::Sys::Process - Process System Call

Usage

  use Sys::Process;
  use Sys::Process::Constant as PROCESS;
  
  # exit
  Sys::Process->exit(PROCESS->EXIT_FAILURE);
  
  # waitpid
  my $wstatus;
  my $changed_process_id = Sys::Process->waitpid($process_id, \$wstatus, PROCESS->WNOHANG);
  
  # getpid
  my $process_id = Sys::Process->getpid;
  
  # sleep
  Sys::Process->sleep(5);

Description

Sys::Process provides the methods to call the system call for the process manipulation.

Class Methods

fork

static method fork : int ();

fork() creates a new process by duplicating the calling process. The new process, referred to as the child, is an exact duplicate of the calling process, referred to as the parent, except for the following points:

See the detail of the fork function in the case of Linux.

getpriority

static method getpriority : int ($which : int, $who : int);

The scheduling priority of the process, process group, or user, as indicated by which and who is obtained with the getpriority() call and set with the setpriority() call.

See the detail of the getpriority function in the case of Linux.

setpriority

static method setpriority : int ($which : int, $who : int, $prio : int);

The scheduling priority of the process, process group, or user, as indicated by which and who is obtained with the getpriority() call and set with the setpriority() call.

See the detail of the setpriority function in the case of Linux.

sleep

static method sleep : int ($seconds : int);

sleep() makes the calling thread sleep until seconds seconds have elapsed or a signal arrives which is not ignored.

See the detail of the sleep function in the case of Linux.

wait

static method wait : int ($wstatus : int*);

All of these system calls are used to wait for state changes in a child of the calling process, and obtain information about the child whose state has changed. A state change is considered to be: the child terminated; the child was stopped by a signal; or the child was resumed by a signal. In the case of a terminated child, performing a wait allows the system to release the resources associated with the child; if a wait is not performed, then the terminated child remains in a "zombie" state (see NOTES below).

See the detail of the wait function in the case of Linux.

See "Waiting Status Checking Methods" about checking the waiting status.

waitpid

static method waitpid : int ($pid : int, $wstatus : int*, $options : int);

All of these system calls are used to wait for state changes in a child of the calling process, and obtain information about the child whose state has changed. A state change is considered to be: the child terminated; the child was stopped by a signal; or the child was resumed by a signal. In the case of a terminated child, performing a wait allows the system to release the resources associated with the child; if a wait is not performed, then the terminated child remains in a "zombie" state (see NOTES below).

See the detail of the waitpid function in the case of Linux.

See Sys::Process::Constant about the constant value for the options.

See "Waiting Status Checking Methods" about checking the waiting status.

system

static method system : int ($command : string);

system() executes a command specified in command by calling /bin/sh -c command, and returns after the command has been completed. During execution of the command, SIGCHLD will be blocked, and SIGINT and SIGQUIT will be ignored.

See the detail of the system function in the case of Linux.

See "Waiting Status Checking Methods" about checking the return value.

exit

static method exit : int ($status : int);

The exit() function causes normal process termination and the value of status & 0377 is returned to the parent (see wait(2)).

See the detail of the exit function in the case of Linux.

See Sys::Process::Constant about the constant value for the status.

pipe

static method pipe : int ($pipe_fds : int[]);

pipe() creates a pipe, a unidirectional data channel that can be used for interprocess communication. The array pipefd is used to return two file descriptors referring to the ends of the pipe. pipefd[0] refers to the read end of the pipe. pipefd[1] refers to the write end of the pipe. Data written to the write end of the pipe is buffered by the kernel until it is read from the read end of the pipe. For further details, see pipe(7).

See the detail of the pipe function in the case of Linux.

_pipe

  static method _pipe : int ($pipe_fds : int[], $psize : int, $textmode : int);

See the detail of the _pipe function in Windows.

getpgid

static method getpgid : int ($pid : int);

All of these interfaces are available on Linux, and are used for getting and setting the process group ID (PGID) of a process. The preferred, POSIX.1-specified ways of doing this are: getpgid(void), for retrieving the calling process's PGID; and setpgid(), for setting a process's PGID.

See the detail of the getpgid function in the case of Linux.

setpgid

static method setpgid : int ($pid : int, $pgid : int);

All of these interfaces are available on Linux, and are used for getting and setting the process group ID (PGID) of a process. The preferred, POSIX.1-specified ways of doing this are: getpgid(void), for retrieving the calling process's PGID; and setpgid(), for setting a process's PGID.

See the detail of the setpgid function in the case of Linux.

getpid

static method getpid : int ();

getpid() returns the process ID of the calling process. (This is often used by routines that generate unique temporary filenames.)

See the detail of the getpid function in the case of Linux.

getppid

static method getppid : int ();

getppid() returns the process ID of the parent of the calling process.

See the detail of the getppid function in the case of Linux.

execv

static method execv : int ($path : string, $args : string[]);

The execv(), execvp(), and execvpe() functions provide an array of pointers to null-terminated strings that represent the argument list available to the new program. The first argument, by convention, should point to the filename associated with the file being executed. The array of pointers must be terminated by a NULL pointer.

See the detail of the https://linux.die.net/man/3/execv function in the case of Linux.

Waiting Status Checking Methods

WIFEXITED

static method WIFEXITED : int ($wstatus : int);

WEXITSTATUS

static method WEXITSTATUS : int ($wstatus : int);

WIFSIGNALED

static method WIFSIGNALED : int ($wstatus : int);

WTERMSIG

static method WTERMSIG : int ($wstatus : int);

WCOREDUMP

static method WCOREDUMP : int ($wstatus : int);

WIFSTOPPED

static method WIFSTOPPED : int ($wstatus : int);

WSTOPSIG

static method WSTOPSIG : int ($wstatus : int);

WIFCONTINUED

static method WIFCONTINUED : int ($wstatus : int);

usleep

static method usleep : int ($usec : int);

The usleep() function suspends execution of the calling thread for (at least) usec microseconds. The sleep may be lengthened slightly by any system activity or by the time spent processing the call or by the granularity of system timers.

See the detail of the usleep function in the case of Linux.

Copyright & License

Copyright (c) 2023 Yuki Kimoto

MIT License