Man page - pid_namespaces(7)
Packages contains this manual
- shm_overview(7)
- nss(5)
- proc_mtrr(5)
- intro(7)
- tcp(7)
- iso_8859-9(7)
- armscii-8(7)
- proc_kpagecount(5)
- initrd(4)
- mouse(4)
- proc_stat(5)
- x25(7)
- proc_interrupts(5)
- fifo(7)
- repertoiremap(5)
- icmp(7)
- futex(7)
- feature_test_macros(7)
- lp(4)
- bpf-helpers(7)
- epoll(7)
- proc_sys_dev(5)
- namespaces(7)
- proc_sysrq-trigger(5)
- proc_bus(5)
- cp1251(7)
- proc_pid_maps(5)
- proc_sys_vm(5)
- proc_pid_projid_map(5)
- st(4)
- proc_pid(5)
- issue(5)
- pid_namespaces(7)
- unicode(7)
- inode(7)
- hosts.equiv(5)
- iso-8859-13(7)
- proc_fb(5)
- proc_modules(5)
- proc_pid_autogroup(5)
- keyrings(7)
- sysvipc(7)
- proc_kmsg(5)
- cgroups(7)
- latin6(7)
- proc_pid_uid_map(5)
- unix(7)
- proc_pid_io(5)
- pts(4)
- packet(7)
- ld-linux.so(8)
- tzselect(8)
- iconv(1)
- proc_pid_syscall(5)
- proc_pid_net(5)
- proc_pid_pagemap(5)
- tty(4)
- proc_profile(5)
- standards(7)
- proc_pid_mounts(5)
- filesystems(5)
- iso-8859-15(7)
- locale(5)
- iso_8859_3(7)
- xattr(7)
- iso-8859-2(7)
- proc_uptime(5)
- persistent-keyring(7)
- credentials(7)
- proc_pid_timers(5)
- utmpx(5)
- vcsa(4)
- proc_pid_exe(5)
- proc_net(5)
- proc_timer_stats(5)
- ip(7)
- proc_pid_fd(5)
- ptmx(4)
- user_namespaces(7)
- resolv.conf(5)
- url(7)
- iso_8859_5(7)
- iso_8859-8(7)
- urn(7)
- process-keyring(7)
- proc_pid_auxv(5)
- proc_ksyms(5)
- proc_ide(5)
- veth(4)
- ldd(1)
- proc_swaps(5)
- landlock(7)
- proc_vmstat(5)
- system_data_types(7)
- cp1252(7)
- lirc(4)
- proc_kpageflags(5)
- random(7)
- precedence(7)
- cpuset(7)
- proc_pid_ns(5)
- acct(5)
- latin4(7)
- proc_pid_cgroup(5)
- proc_cpuinfo(5)
- iso_8859-2(7)
- proc_keys(5)
- charsets(7)
- pldd(1)
- proc_pid_stat(5)
- rtnetlink(7)
- netlink(7)
- ram(4)
- mem(4)
- iso-8859-6(7)
- proc_key-users(5)
- iso_8859_15(7)
- fanotify(7)
- proc_sys_net(5)
- sysfs(5)
- math_error(7)
- latin1(7)
- proc_pid_root(5)
- nptl(7)
- proc_cgroups(5)
- proc_iomem(5)
- proc_pid_statm(5)
- sem_overview(7)
- hier(7)
- full(4)
- proc_pid_status(5)
- proc_pid_cwd(5)
- proc_pid_cpuset(5)
- proc_scsi(5)
- uri(7)
- proc_diskstats(5)
- iso_8859_6(7)
- latin2(7)
- latin5(7)
- man-pages(7)
- ld.so(8)
- uts_namespaces(7)
- proc_pid_mountstats(5)
- intro(3)
- proc_pid_seccomp(5)
- proc_pid_wchan(5)
- attributes(7)
- symlink(7)
- mount_namespaces(7)
- charmap(5)
- tis-620(7)
- iso-8859-10(7)
- getent(1)
- proc_buddyinfo(5)
- ttytype(5)
- rtc(4)
- proc_malloc(5)
- suffixes(7)
- sln(8)
- signal(7)
- proc_sys_abi(5)
- signal-safety(7)
- time_namespaces(7)
- proc_pid_comm(5)
- raw(7)
- gai.conf(5)
- proc_crypto(5)
- locale(1)
- iso-8859-3(7)
- motd(5)
- proc_meminfo(5)
- iso-8859-8(7)
- protocols(5)
- proc_pid_map_files(5)
- pthreads(7)
- null(4)
- proc(5)
- zdump(8)
- socket(7)
- proc_sys_kernel(5)
- ddp(7)
- memusagestat(1)
- hd(4)
- iso-8859-14(7)
- shells(5)
- pipe(7)
- glob(7)
- proc_self(5)
- network_namespaces(7)
- utmp(5)
- proc_kcore(5)
- nsswitch.conf(5)
- sd(4)
- iso-8859-5(7)
- iso_8859_16(7)
- man(7)
- iso_8859-6(7)
- dir_colors(5)
- mq_overview(7)
- vsock(7)
- ascii(7)
- thread-keyring(7)
- fs(5)
- proc_pid_attr(5)
- proc_sys_debug(5)
- proc_sys(5)
- proc_pid_cmdline(5)
- pty(7)
- services(5)
- cgroup_namespaces(7)
- securetty(5)
- netdevice(7)
- iso_8859_13(7)
- host.conf(5)
- proc_pid_setgroups(5)
- proc_slabinfo(5)
- sock_diag(7)
- iso_8859-14(7)
- iso-8859-11(7)
- iso_8859_11(7)
- operator(7)
- regex(7)
- wavelan(4)
- proc_sys_fs(5)
- nologin(5)
- proc_pci(5)
- koi8-r(7)
- erofs(5)
- intro(2)
- utf8(7)
- proc_kallsyms(5)
- proc_sysvipc(5)
- queue(7)
- proc_sys_sunrpc(5)
- intro(5)
- latin8(7)
- mtrace(1)
- ipc_namespaces(7)
- dsp56k(4)
- iso_8859_4(7)
- proc_pid_smaps(5)
- proc_cmdline(5)
- rpc(5)
- proc_tty(5)
- proc_version(5)
- smartpqi(4)
- proc_pid_timerslack_ns(5)
- aio(7)
- session-keyring(7)
- resolver(5)
- slabinfo(5)
- wtmp(5)
- iso_8859_9(7)
- proc_locks(5)
- mailaddr(7)
- proc_pid_oom_score(5)
- kmem(4)
- iconvconfig(8)
- iso_8859-7(7)
- glibc(7)
- hostname(7)
- proc_thread-self(5)
- ipv6(7)
- iso_8859_7(7)
- proc_kpagecgroup(5)
- core(5)
- time(7)
- units(7)
- proc_dma(5)
- loop(4)
- address_families(7)
- zero(4)
- intro(4)
- procfs(5)
- iso_8859-4(7)
- vdso(7)
- tmpfs(5)
- iso-8859-16(7)
- iso_8859_10(7)
- user-session-keyring(7)
- libc(7)
- proc_fs(5)
- koi8-u(7)
- latin3(7)
- proc_tid_children(5)
- proc_pid_limits(5)
- proc_pid_coredump_filter(5)
- iso_8859-15(7)
- arp(7)
- urandom(4)
- iso_8859-10(7)
- hpsa(4)
- proc_pid_environ(5)
- boot(7)
- ftm(7)
- ld-linux(8)
- proc_driver(5)
- loop-control(4)
- iso_8859-16(7)
- proc_filesystems(5)
- tzfile(5)
- sprof(1)
- proc_pid_task(5)
- proc_pid_oom_score_adj(5)
- proc_mounts(5)
- iso-8859-4(7)
- iso_8859-1(7)
- utf-8(7)
- iso_8859-13(7)
- intro(6)
- proc_timer_list(5)
- rtld-audit(7)
- iso_8859-3(7)
- group(5)
- sched(7)
- proc_pid_clear_refs(5)
- hosts(5)
- iso_8859-11(7)
- numa(7)
- iso_8859_2(7)
- locale(7)
- iso-8859-1(7)
- fuse(4)
- proc_tid(5)
- proc_execdomains(5)
- proc_pid_mountinfo(5)
- intro(8)
- iso_8859_8(7)
- proc_loadavg(5)
- proc_pid_oom_adj(5)
- re_format(7)
- iso_8859_14(7)
- zic(8)
- bootparam(7)
- inotify(7)
- posixoptions(7)
- proc_partitions(5)
- iso-8859-9(7)
- proc_pid_mem(5)
- networks(5)
- proc_sys_user(5)
- udp(7)
- proc_zoneinfo(5)
- latin10(7)
- proc_pid_fdinfo(5)
- proc_pid_stack(5)
- memusage(1)
- spufs(7)
- pkeys(7)
- path_resolution(7)
- proc_ioports(5)
- intro(1)
- ldconfig(8)
- msr(4)
- svipc(7)
- port(4)
- proc_pid_personality(5)
- cciss(4)
- latin9(7)
- capabilities(7)
- localedef(1)
- vcs(4)
- iso_8859-5(7)
- elf(5)
- proc_sys_proc(5)
- console_codes(4)
- random(4)
- iso-8859-7(7)
- termcap(5)
- cpuid(4)
- environ(7)
- string_copying(7)
- proc_pid_gid_map(5)
- queue(3)
- termio(7)
- user-keyring(7)
- complex(7)
- latin7(7)
- proc_config.gz(5)
- udplite(7)
- kernel_lockdown(7)
- proc_devices(5)
- proc_apm(5)
- iso_8859_1(7)
- proc_pid_numa_maps(5)
apt-get install manpages
Available languages:
en fr sv ja ru ro deManual
pid_namespaces
NAMNBESKRIVNING
Namnrymdens init-process
NĂ€stning av PID-namnrymder
semantiken hos setns(2) och unshare(2)
Adoption av förÀldralösa barn
Kompatibilitet hos CLONE_NEWPID med andra CLONE_*-flaggor
/proc och PID-namnrymder
/proc-filer
Diverse
STANDARDER
EXEMPEL
SE ĂVEN
ĂVERSĂTTNING
NAMN
pid_namespaces â översikt över Linux PID-namnrymder
BESKRIVNING
För en översikt över namnrymder, se namespaces (7).
PID-namnrymder isolerar process-ID-nummerrymden, vilket betyder att processer i olika PID-namnrymder kan ha samma PID. PID-namnrymder gör att behÄllare kan Ästadkomma funktionalitet sÄsom att stoppa/Äteruppta uppsÀttningen av processer i behÄllaren och migrera behÄllaren till en ny vÀrd medan processerna inuti behÄllaren behÄller samma PID:ar.
PID:ar i en ny PID-namnrymd börjar pÄ 1, ungefÀr som ett fristÄende system, och anrop av fork (2), vfork (2) eller clone (2) kommer skapa processer med PID:ar som Àr unika inom namnrymden.
AnvÀndning av PID-namnrymder krÀver en kÀrna som Àr konfigurerad med alternativet CONFIG_PID_NS .
Namnrymdens init-process
Den första processen som skapas i en ny namnrymd (d.v.s., processen som skapas med clone (2) med flaggan CLONE_NEWPID , eller det första barnet som skapas av en process efter ett anrop av unshare (2) med flaggan CLONE_NEWPID ) har PID:en 1, och Ă€r âinitâ-processen för namnrymden (se init (1)). Denna process blir förĂ€lder för barnprocesser som blir förĂ€ldralösa för att en process som bor i denna PID-namnrymd avslutas (se nedan för ytterligare detaljer).
Om âinitâ-processen i en PID-namnrymd avslutas avslutar kĂ€rnan alla processerna i namnrymden med en signal SIGKILL . Detta beteende avspeglar faktumet att âinitâ-processen Ă€r avgörande för den korrekta funktionen hos en PID-namnrymd. I detta fall kommer en senare fork (2) in i denna PID-namnrymd att misslyckas med felet ENOMEM ; det Ă€r inte möjligt att skapa en ny process i en PID-namnrymd vars âinitâ-process har avslutat. SĂ„dana scenarier kan uppstĂ„ nĂ€r, till exempel, en process anvĂ€nder en öppen filbeskrivare för en fil /proc/ pid /ns/pid som motsvarar en process som fanns i en namnrymd för att göra setns (2) in i den namnrymden efter att âinitâ-processen har avslutat. Ett annat möjligt scenario kan uppstĂ„ efter ett anrop av unshare (2): om det första barnet som dĂ€refter skapas av en fork (2) avslutar, dĂ„ misslyckas senare anrop av fork (2) med ENOMEM .
Endast signaler för vilka âinitâ-processen har etablerat en signalhanterare kan skickas till âinitâ-processen av andra medlemmar av PID-namnrymden. Denna begrĂ€nsning gĂ€ller Ă€ven för privilegierade processer, och hindrar andra medlemmar av PID-namnrymden frĂ„n att av misstag döda âinitâ-processen.
PĂ„ liknande sĂ€tt kan en process i en anfadernamnrymd â med hĂ€nsyn till de vanliga rĂ€ttighetskontrollerna som beskrivs i kill (2) â skicka signaler till âinitâ-processen i en barn-PID-namnrymd endast om âinitâ-processen har etablerat en hanterare för den signalen. (Inom hanteraren kommer fĂ€ltet siginfo_t si_pid som beskrivs i sigaction (2) att vara noll.) SIGKILL eller SIGSTOP hanteras speciellt: dessa signaler skickas tvingande nĂ€r de skickas frĂ„n en anfader-PID-namnrymd. Ingendera av dessa signaler kan fĂ„ngas av âinitâ-processen, och kommer dĂ€rför resultera i de vanliga Ă„tgĂ€rderna som associeras med dessa signaler (avslut respektive stopp av processen).
Med början frĂ„n Linux 3.4 fĂ„r systemanropet reboot (2) en signal att skickas till namnrymdens âinitâ-process. Se reboot (2) för mer detaljer.
NĂ€stning av PID-namnrymder
PID-namnrymder kan nĂ€stas: varje PID-namnrymd har en förĂ€lder, utom den intitiala (ârotâ) PID-namnrymden. FörĂ€lder till en PID-namnrymd Ă€r PID-namnrymden för processen som skapade namnrymden med clone (2) eller unshare (2). PID-namnrymder formar alltsĂ„ ett trĂ€d, dĂ€r alla namnrymder ytterst spĂ„rar sitt ursprung till rotnamnrymden. Sedan Linux 3.7 begrĂ€nsar kĂ€rnan det maximala nĂ€stningsdjupet för PID-namnrymder till 32.
En process Ă€r synlig för andra processer i sin PID-namnrymd, och för processer i varje direkt anfaders-PID-namnrymd hela vĂ€gen tillbaka till rot-PID-namnrymden. I detta sammanhang betyder âsynligâ att en process kan vara mĂ„let för Ă„tgĂ€rder av en annan process med systemanrop som anger ett process-ID. OmvĂ€nt, processer i en barn-PID-namnrymd kan inte se processer i förĂ€ldranamnrymden och mer avlĂ€gsna anfadernamnrymder. Mer koncist: en process kan se (t.ex., skicka signaler till med kill (2), sĂ€tta nice-vĂ€rde pĂ„ med setpriority (2), etc.) endast processer som ingĂ„r i dess egen PID-namnrymd och avkommor av den namnrymden.
En process har ett process-ID i varje lager av PID-namnrymdshierarkin i vilken den Àr synlig, och gÄr tillbaka genom varje direkt anfadernamnrymd vidare till rot-PID-namnrymden. Systemanrop som verkar pÄ process-ID:er arbetar alltid med anvÀndning av process-ID:t som Àr synligt i anroparens PID-namnrymd. Ett anrop av getpid (2) returnerar alltid PID:en som Àr associerad med namnrymden i vilken processen skapades.
NÄgra processer i en PID-namnrymd kan ha förÀldrar som ligger utanför namnrymden. Till exempel, förÀldern till den initiala processen i namnrymden (d.v.s., processen init (1) med PID 1) finns av nödvÀndighet i en annan namnrymd. PÄ samma sÀtt finns de direkta barnen till en process som anvÀnder setns (2) för att fÄ sina barn att gÄ med i en PID-namnrymd i en annan PID-namnrymd Àn den som anropade setns (2). Anrop av getppid (2) för sÄdana processer returnerar 0.
Medan processer fritt kan gÄ in i barn-PID-namnrymder (t.ex. med setns (2) med en PID-namnrymdsfilbeskrivare) kan de inte flytta i nÄgon annan riktning. Det vill sÀga, processer kan inte gÄ in i nÄgon anfadernamnrymd (förÀlder, farförÀlder, etc.). Att byta PID-namnrymder Àr en envÀgsÄtgÀrd.
à tgÀrden NS_GET_PARENT till ioctl (2) kan anvÀndas för att upptÀcka förÀldrarelationen mellan PID-namnrymder; se ioctl_nsfs (2).
semantiken hos setns(2) och unshare(2)
Anrop av setns (2) som anger en PID-namnrymdsfilbeskrivare och anrop av unshare (2) med flagga CLONE_NEWPID fÄr barn som senare skapas av anroparen att placeras i en annan PID-namnrymd Àn anroparens. (FrÄn Linux 4.12 visas PID-namnrymden via filen /proc/ pid /ns/pid_for_children , sÄ som beskrivs i namespaces (7).) Dessa anrop Àndrar dock inte PID-namnrymden för den anropande processen, dÄ detta skulle Àndra anroparens uppfattning om sin egen PID (sÄ som den rapporteras av getpid ()), vilket skulle göra sönder mÄnga program och bibliotek.
För att uttrycka saker pÄ ett annat sÀtt: en process PID-namnrymdsmedlemskap avgörs nÀr processen skapas och kan inte Àndras dÀrefter. Bland annat betyder detta att förÀldrarelationen mellan processer avspeglar förÀldrarelationen mellan PID-namnrymder: förÀldern till en process finns antingen i samma namnrymd eller bor i den omedelbara förÀldra-PID-namnrymden.
En process kan anropa unshare (2) med flaggan CLONE_NEWPID endast en gÄng. Efter att den utfört denna ÄtgÀrd kommer dess symboliska lÀnk /proc/ pid /ns/pid_for_children att vara tom tills det första barnet Àr skapat i namnrymden.
Adoption av förÀldralösa barn
NĂ€r en barnprocess blir förĂ€ldralös flyttas den över till âinitâ-processen i PID-namnrymden för dess förĂ€lder (om inte en av de nĂ€rmare anfĂ€derna till förĂ€ldern har anvĂ€nt kommandot prctl (2) PR_SET_CHILD_SUBREAPER för att markera sig sjĂ€lv som den som skördar avkommeprocesser som blir förĂ€ldralösa). Observera att pĂ„ grund av semantiken hos setns (2) och unshare (2) som beskrivs ovan kan detta vara âinitâ-processen i PID-namnrymden som Ă€r förĂ€lder till barnets PID-namnrymd, istĂ€llet för âinitâ-processen i barnets egen PID-namnrymd.
Kompatibilitet hos CLONE_NEWPID med andra CLONE_*-flaggor
I de nuvarande versionerna av Linux kan inte CLONE_NEWPID kombineras med CLONE_THREAD . TrÄdar mÄste befinna sig i samma PID-namnrymd sÄ att de kan skicka signaler till varandra. Vidare mÄste det vara möjligt att se alla trÄdarna hos en process i filsystemet proc (5). Dessutom, om tvÄ trÄdar skulle vara i olika PID-namnrymder skulle inte process-ID:t för processen som skickar en signal kunna kodas pÄ ett meningsfullt sÀtt nÀr en signal skickas (se beskrivningen av typen siginfo_t i sigaction (2)). Eftersom detta berÀknas nÀr en signal köas upp skulle en signalkö delad mellan processer i flera PID-namnrymder omöjliggöra det.
I tidigare versioner av Linux var dessutom CLONE_NEWPID inte tillĂ„tet (misslyckades med felet EINVAL ) i kombination med CLONE_SIGHAND (före Linux 4.3) sĂ„vĂ€l som CLONE_VM (före Linux 3.12). Ăndringarna som lyfte dessa begrĂ€nsningar har Ă€ven porterats till tidigare stabila kĂ€rnor.
/proc och PID-namnrymder
Ett /proc -filsystem visar (i katalogerna /proc/ pid) endast processer som Àr synliga i PID-namnrymden för processen som utför monteringen, Àven om /proc visas för processer i andra namnrymder.
Efter att ha skapat en ny PID-namnrymd Àr det bra för barnet att byta sin rotkatalog och montera en ny procfs-instans pÄ /proc sÄ att verktyg sÄsom ps (1) fungerar korrekt. Om en ny monteringsnamnrymd skapas samtidigt genom att inkludera CLONE_NEWNS i argumentet flaggor till clone (2) eller unshare (2), dÄ Àr det inte nödvÀndigt att byta rotkatalog: en ny procfs-instans kan monteras direkt över /proc .
FrÄn ett skal Àr kommandot för att montera /proc :
$ mount -t proc proc /proc
Att anropa readlink (2) pÄ sökvÀgen /proc/self ger process-ID:t för anroparen i den procfs-monteringens PID-namnrymd (d.v.s., PID-namnrymden för processen som monterade procfs). Detta kan vara anvÀndbart för introspektionsÀndamÄl, nÀr en process vill veta sin PID i andra namnrymder.
/proc-filer
/proc/sys/kernel/ns_last_pid (frÄn Linux 3.3)
Denna fil (som Àr virtualiserad per PID-namnrymd) visar den senaste PID:en som allokerades i denna PID-namnrymd. NÀr nÀsta PID allokeras kommer kÀrnan söka efter den lÀgsta oallokerade PID:en som Àr större Àn detta vÀrde, och nÀr denna fil dÀrefter lÀses kommer den visa den PID:en.
Denna fil kan skrivas av en process som har förmÄgan CAP_SYS_ADMIN eller (frÄn Linux 5.9) CAP_CHECKPOINT_RESTORE inuti anvÀndarnamnrymden som Àger PID-namnrymden. Detta gör det möjligt att bestÀmma PID:en som allokeras för nÀsta process som skapas inuti denna PID-namnrymd.
Diverse
NÀr ett process-ID skickas över ett UNIX-domÀnsuttag till en process i en annan PID-namnrymd (se beskrivningen av SCM_CREDENTIALS i unix (7)) översÀtts den till det motsvarande PID-vÀrdet i den mottagande processens PID-namnrymd.
STANDARDER
Linux.
EXEMPEL
Se user_namespaces (7).
SE ĂVEN
clone (2), reboot (2), setns (2), unshare (2), proc (5), capabilities (7), credentials (7), mount_namespaces (7), namespaces (7), user_namespaces (7), switch_root (8)
ĂVERSĂTTNING
Den svenska översÀttningen av denna manualsida skapades av Göran Uddeborg <goeran@uddeborg.se>
Denna översÀttning Àr fri dokumentation; lÀs GNU General Public License Version 3 eller senare för upphovsrÀttsvillkor. Vi tar INGET ANSVAR.
Om du hittar fel i översÀttningen av denna manualsida, skicka ett mail till Tp-sv@listor.tp-sv.se .