- alarm(SECONDS)
- alarm SECONDS
-
Arranges to have a SIGALRM delivered to this process after the specified number
of seconds (minus 1, actually) have elapsed. Thus, alarm(15) will cause
a SIGALRM at some point more than 14 seconds in the future.
Only one timer may be counting at once. Each call disables the previous
timer, and an argument of 0 may be supplied to cancel the previous timer
without starting a new one.
The returned value is the amount of time remaining on the previous timer.
- chdir(EXPR)
- chdir EXPR
-
Changes the working directory to EXPR, if possible.
If EXPR is omitted, changes to home directory.
Returns 1 upon success, 0 otherwise.
See example under
die.
- chroot(FILENAME)
- chroot FILENAME
-
Does the same as the system call of that name.
If you don't know what it does, don't worry about it.
If FILENAME is omitted, does chroot to $_.
- die(LIST)
- die LIST
-
Outside of an eval, prints the value of LIST to
STDERR
and exits with the current value of $!
(errno).
If $! is 0, exits with the value of ($? >> 8) (\`command\` status).
If ($? >> 8) is 0, exits with 255.
Inside an eval, the error message is stuffed into $@ and the eval is terminated
with the undefined value.
Equivalent examples:
die "Can't cd to spool: $!\n"
unless chdir '/usr/spool/news';
chdir '/usr/spool/news' || die "Can't cd to spool: $!\n"
If the value of EXPR does not end in a newline, the current script line
number and input line number (if any) are also printed, and a newline is
supplied.
Hint: sometimes appending ", stopped" to your message will cause it to make
better sense when the string "at foo line 123" is appended.
Suppose you are running script "canasta".
die "/etc/games is no good";
die "/etc/games is no good, stopped";
produce, respectively
/etc/games is no good at canasta line 123.
/etc/games is no good, stopped at canasta line 123.
See also
exit.
- exec(LIST)
- exec LIST
-
If there is more than one argument in LIST, or if LIST is an array with
more than one value,
calls execvp() with the arguments in LIST.
If there is only one scalar argument, the argument is checked for shell metacharacters.
If there are any, the entire argument is passed to "/bin/sh -c" for parsing.
If there are none, the argument is split into words and passed directly to
execvp(), which is more efficient.
Note: exec (and system) do not flush your output buffer, so you may need to
set $| to avoid lost output.
Examples:
exec '/bin/echo', 'Your arguments are: ', @ARGV;
exec "sort $outfile | uniq";
If you don't really want to execute the first argument, but want to lie
to the program you are executing about its own name, you can specify
the program you actually want to run by assigning that to a variable and
putting the name of the variable in front of the LIST without a comma.
(This always forces interpretation of the LIST as a multi-valued list, even
if there is only a single scalar in the list.)
Example:
$shell = '/bin/csh';
exec $shell '-sh'; # pretend it's a login shell
- exit(EXPR)
- exit EXPR
-
Evaluates EXPR and exits immediately with that value.
Example:
$ans = <STDIN>;
exit 0 if $ans =~ /^[Xx]/;
See also
die.
If EXPR is omitted, exits with 0 status.
- fork
- Does a fork() call.
Returns the child pid to the parent process and 0 to the child process.
Note: unflushed buffers remain unflushed in both processes, which means
you may need to set $| to avoid duplicate output.
- getlogin
- Returns the current login from /etc/utmp, if any.
If null, use getpwuid.
$login = getlogin || (getpwuid($<))[0] || "Somebody";
- getpgrp(PID)
- getpgrp PID
-
Returns the current process group for the specified PID, 0 for the current
process.
Will produce a fatal error if used on a machine that doesn't implement
getpgrp(2).
If EXPR is omitted, returns process group of current process.
- getppid
- Returns the process id of the parent process.
- getpriority(WHICH,WHO)
- Returns the current priority for a process, a process group, or a user.
(See getpriority(2).)
Will produce a fatal error if used on a machine that doesn't implement
getpriority(2).
- kill(LIST)
- kill LIST
-
Sends a signal to a list of processes.
The first element of the list must be the signal to send.
Returns the number of processes successfully signaled.
$cnt = kill 1, $child1, $child2;
kill 9, @goners;
If the signal is negative, kills process groups instead of processes.
(On System V, a negative process number will also kill process groups,
but that's not portable.)
You may use a signal name in quotes.
- setpgrp(PID,PGRP)
- Sets the current process group for the specified PID, 0 for the current
process.
Will produce a fatal error if used on a machine that doesn't implement
setpgrp(2).
- setpriority(WHICH,WHO,PRIORITY)
- Sets the current priority for a process, a process group, or a user.
(See setpriority(2).)
Will produce a fatal error if used on a machine that doesn't implement
setpriority(2).
- sleep(EXPR)
- sleep EXPR
- sleep
- Causes the script to sleep for EXPR seconds, or forever if no EXPR.
May be interrupted by sending the process a SIGALRM.
Returns the number of seconds actually slept.
You probably cannot mix alarm() and sleep() calls, since sleep() is
often implemented using alarm().
- syscall(LIST)
- syscall LIST
-
Calls the system call specified as the first element of the list, passing
the remaining elements as arguments to the system call.
If unimplemented, produces a fatal error.
The arguments are interpreted as follows: if a given argument is numeric,
the argument is passed as an int.
If not, the pointer to the string value is passed.
You are responsible to make sure a string is pre-extended long enough
to receive any result that might be written into a string.
If your integer arguments are not literals and have never been interpreted
in a numeric context, you may need to add 0 to them to force them to look
like numbers.
require 'syscall.ph'; # may need to run h2ph
syscall(&SYS_write, fileno(STDOUT), "hi there\n", 9);
- system(LIST)
- system LIST
-
Does exactly the same thing as "exec LIST" except that a fork
is done first, and the parent process waits for the child process to complete.
Note that argument processing varies depending on the number of arguments.
The return value is the exit status of the program as returned by the wait()
call.
To get the actual exit value divide by 256.
See also
exec.
- time
- Returns the number of non-leap seconds since 00:00:00 UTC, January 1, 1970.
Suitable for feeding to gmtime() and localtime().
- times
- Returns a four-element array giving the user and system times, in seconds, for this
process and the children of this process.
($user,$system,$cuser,$csystem) = times;
- umask(EXPR)
- umask EXPR
- umask
- Sets the umask for the process and returns the old one.
If EXPR is omitted, merely returns current umask.
- wait
- Waits for a child process to terminate and returns the pid of the deceased
process, or -1 if there are no child processes.
The status is returned in $?.
- waitpid(PID,FLAGS)
- Waits for a particular child process to terminate and returns the pid of the deceased
process, or -1 if there is no such child process.
The status is returned in $?.
If you say
require "sys/wait.h";
...
waitpid(-1,&WNOHANG);
then you can do a non-blocking wait for any process. Non-blocking wait
is only available on machines supporting either the
waitpid (2)
or
wait4 (2)
system calls.
However, waiting for a particular pid with FLAGS of 0 is implemented
everywhere. (Perl emulates the system call by remembering the status
values of processes that have exited but have not been harvested by the
Perl script yet.)
- warn(LIST)
- warn LIST
-
Produces a message on STDERR just like "die", but doesn't exit.