… | |
… | |
6 | |
6 | |
7 | use Linux::Clone; |
7 | use Linux::Clone; |
8 | |
8 | |
9 | =head1 DESCRIPTION |
9 | =head1 DESCRIPTION |
10 | |
10 | |
11 | This module exposes the linux clone(2) and unshare(2) syscalls to |
11 | This module exposes the linux clone(2), unshare(2) and related syscalls to |
12 | Perl. |
12 | Perl. |
13 | |
13 | |
14 | =over 4 |
14 | =over 4 |
15 | |
15 | |
16 | =item $retval = unshare $flags |
16 | =item $retval = unshare $flags |
… | |
… | |
24 | Linux::Clone::NEWNS (in unshare, implies FS) |
24 | Linux::Clone::NEWNS (in unshare, implies FS) |
25 | Linux::Clone::VM (in unshare, implies SIGHAND) |
25 | Linux::Clone::VM (in unshare, implies SIGHAND) |
26 | Linux::Clone::THREAD (in unshare, implies VM, SIGHAND) |
26 | Linux::Clone::THREAD (in unshare, implies VM, SIGHAND) |
27 | Linux::Clone::SIGHAND |
27 | Linux::Clone::SIGHAND |
28 | Linux::Clone::SYSVSEM |
28 | Linux::Clone::SYSVSEM |
|
|
29 | Linux::Clone::NEWUSER (in unshare, implies CLONE_THREAD) |
|
|
30 | Linux::Clone::NEWPID |
29 | Linux::Clone::NEWUTS |
31 | Linux::Clone::NEWUTS |
30 | Linux::Clone::NEWIPC |
32 | Linux::Clone::NEWIPC |
31 | Linux::Clone::NEWNET |
33 | Linux::Clone::NEWNET |
|
|
34 | Linux::Clone::NEWCGROUP |
32 | |
35 | |
33 | Example: unshare the network namespace and prove that by calling ifconfig, |
36 | Example: unshare the network namespace and prove that by calling ifconfig, |
34 | showing only an unconfigured lo interface. |
37 | showing only an unconfigured lo interface. |
35 | |
38 | |
36 | Linux::Clone::unshare Linux::Clone::NEWNET |
39 | Linux::Clone::unshare Linux::Clone::NEWNET |
… | |
… | |
122 | Linux::Clone::PARENT_SETTID (not yet implemented) |
125 | Linux::Clone::PARENT_SETTID (not yet implemented) |
123 | Linux::Clone::CHILD_SETTID (not yet implemented) |
126 | Linux::Clone::CHILD_SETTID (not yet implemented) |
124 | Linux::Clone::CHILD_CLEARTID (not yet implemented) |
127 | Linux::Clone::CHILD_CLEARTID (not yet implemented) |
125 | Linux::Clone::DETACHED |
128 | Linux::Clone::DETACHED |
126 | Linux::Clone::UNTRACED |
129 | Linux::Clone::UNTRACED |
127 | Linux::Clone::NEWUSER |
|
|
128 | Linux::Clone::NEWPID |
|
|
129 | Linux::Clone::IO |
130 | Linux::Clone::IO |
130 | |
131 | |
131 | Note that for practical reasons you basically must not use |
132 | Note that for practical reasons you basically must not use |
132 | C<Linux::Clone::VM> or C<Linux::Clone::VFORK>, as perl is unlikely to cope |
133 | C<Linux::Clone::VM> or C<Linux::Clone::VFORK>, as perl is unlikely to cope |
133 | with that. |
134 | with that. |
… | |
… | |
137 | Example: do a fork-like clone, sharing nothing, slightly confusing perl |
138 | Example: do a fork-like clone, sharing nothing, slightly confusing perl |
138 | and your libc, and exit immediately. |
139 | and your libc, and exit immediately. |
139 | |
140 | |
140 | my $pid = Linux::Clone::clone sub { warn "in child"; 77 }, 0, POSIX::SIGCHLD; |
141 | my $pid = Linux::Clone::clone sub { warn "in child"; 77 }, 0, POSIX::SIGCHLD; |
141 | |
142 | |
|
|
143 | =item Linux::Clone::setns $fh_or_fd[, $nstype] |
|
|
144 | |
|
|
145 | Calls setns(2) on the file descriptor (or file handle) C<$fh_or_fd>. If |
|
|
146 | C<$nstype> is missing, then C<0> is used. |
|
|
147 | |
|
|
148 | At the time of this writing, C<$nstype> can be C<0>, C<Linux::Clone::NEWIPC>, |
|
|
149 | C<Linux::Clone::NEWNET>, C<Linux::Clone::NEUTS>, C<Linux::Clone::NEWCGROUP>, |
|
|
150 | C<Linux::Clone::NEWNS>, C<Linux::Clone::NEWPID> or C<Linux::Clone::NEWUSER>. |
|
|
151 | |
142 | =back |
152 | =back |
143 | |
153 | |
144 | =cut |
154 | =cut |
145 | |
155 | |
146 | package Linux::Clone; |
156 | package Linux::Clone; |
147 | |
157 | |
148 | # use common::sense; |
158 | # use common::sense; |
149 | |
159 | |
150 | BEGIN { |
160 | BEGIN { |
151 | our $VERSION = '0.01'; |
161 | our $VERSION = '1.0'; |
152 | |
162 | |
153 | require XSLoader; |
163 | require XSLoader; |
154 | XSLoader::load (__PACKAGE__, $VERSION); |
164 | XSLoader::load (__PACKAGE__, $VERSION); |
155 | } |
165 | } |
156 | |
166 | |