[Previous] [Contents] [Index] [Next]

on

Execute a command on another node or tty (QNX Neutrino)

Syntax:

on [-d] [-h]  [-n|f nodename] [-p priority[policy]] [-s]
   [-t tty] [-u user | -l user_name] [-W nsec]
   [-w device] [command [args]]

Options:

-d
Detach command from its parent (i.e. sever the parent/child relationship). This is useful for remotely created processes that never exit and that the shell therefore doesn't need to wait for. Unless this option is specified, a network connection is created connecting the parent to the child.
-f nodename
Spawn from the remote node using the remote node's / as prefix root.
-h
Start command in a HELD state. This option is useful for starting up programs with the intention of debugging them. You can also start up several commands in the HELD state, then send them all a signal to start -- they'll all start at almost the exact same time, since their load times will have been eliminated.
-l user_name
Login as the given user. This option is similar to the -u option, but also sets the LOGNAME, HOME, and SHELL environment variables, sets the umask to 022, and changes to the directory specified for the user in the password database.
-n nodename
Execute command on remote nodename.
-p priority[policy]
Execute the command at the specified priority, optionally changing the scheduling policy.

Priorities are in the range from 0 through 255. Priority 0 is used for the idle thread; by default, priorities of 64 and greater are privileged, so only processes with an effective user ID of 0 (i.e. root) can use them. Non-root (and root) processes can use priorities from 1 through 63.

You can change the range of privileged priorities with the -P option for procnto.

The scheduling policy must be one of:

If you don't specify a command, the change applies to the parent process.

-s
Spawn the command in a new process group.
-t tty
Open the specified terminal name as file descriptors 0, 1, and 2 for command. The command is run in a new session with tty as its controlling terminal. If tty doesn't contain a slash (/), /dev/ is added to the beginning.
-u uid[:gid[,gid,...]]
-u user_name
Run as the user specified by the numeric uid, in the specified group(s), or as the given user_name.
-W nsec
The number of seconds to wait for the device specified in the following -w option. The default is forever.
-w device
Wait for a stat() on the given device to succeed before continuing. If device doesn't contain a slash (/), /dev/ is added to the beginning.
Note: You can repeat the -w and -W options on the command line. They're processed in the order given, before any other options.

command [args]
The command to be executed, and any arguments to be passed to it.

Description:

The on utility extends the process creation abilities of the shell (sh). You can start a process on a remote node, on a different controlling terminal, in a HELD state for debugging or later synchronized starting.

If the -d option isn't specified, a network connection is created as a local agent for the remote child process. When the child terminates, the parent must do a wait() on the created connection to reap the zombie process entry for the child. If the -d option is specified, the command is detached from its parent. The parent isn't able to do a wait() for the child, nor is it able to control it via signals.

By default, the command is run in the current session. The -t option starts a new session, which means the command won't receive a SIGHUP if the current session leader terminates.


Caution: The on -t command becomes the new session leader on the tty specified, i.e. it receives SIGHUP generated by hangups on that tty. Any processes originally running on that tty don't get SIGHUP, and this condition persists even when the process started by on has terminated. For this reason, specify only ttys that aren't currently in use.

Examples:

Run login on console 2:

on -t con2 login

Run sort as an orphan on the node named peterv:

on -d -n peterv sort file.dat

Exit status:

The on utility exits with the exit status of command.

See also:

nice, sh

stat() in the Library Reference


[Previous] [Contents] [Index] [Next]