The zsh/clone
module makes available one builtin command:
clone
ttyCreates a forked instance of the current shell, attached to the specified
tty. In the new shell, the PID
, PPID
and TTY
special
parameters are changed appropriately. $!
is set to zero in the new
shell, and to the new shell’s PID in the original shell.
The return status of the builtin is zero in both shells if successful, and non-zero on error.
The target of clone
should be an unused terminal, such as an unused virtual
console or a virtual terminal created by
xterm -e sh -c 'trap : INT QUIT TSTP; tty; while :; do sleep 100000000; done'
Some words of explanation are warranted about this long xterm command line: when doing clone on a pseudo-terminal, some other session ("session" meant as a unix session group, or SID) is already owning the terminal. Hence the cloned zsh cannot acquire the pseudo-terminal as a controlling tty. That means two things:
This does not apply when cloning to an unused vc.
Cloning to a used (and unprepared) terminal will result in two processes reading simultaneously from the same terminal, with input bytes going randomly to either process.
clone
is mostly useful as a shell built-in replacement for
openvt.