正在運行的C程序如何檢測它是否在Illumos/solaris上的「chroot」中運行?如何檢測Illumos/solaris上的chroot?
有一個Debian實用程序[1],它在linux,freebsd,hurd上使用了一些技巧。
如何在Illumos/solaris上做到這一點?
正在運行的C程序如何檢測它是否在Illumos/solaris上的「chroot」中運行?如何檢測Illumos/solaris上的chroot?
有一個Debian實用程序[1],它在linux,freebsd,hurd上使用了一些技巧。
如何在Illumos/solaris上做到這一點?
有this thread on comp.unix.solaris哪些細節的各種方法以找出是否的Solaris運行的區域(容器/的chroot上大量-的類固醇)或虛擬機內。特別是廣泛the list in this posting(似乎來自this blog post我會重現一些與此區域的項目 - 。那些提供給非root用戶
/usr/bin/zonename
命令告訴你不同的東西比「全球」sched
‘全球’/管理區)的環境,但zsched
的區域內。prstat
命令(類似於top
其他UN * Xes)有-z
/-Z
comman d線選項來限制報告到特定區域(-z
)或給出所有區域的統計(-Z
);在區域內,這些選項不起作用/只顯示您正在運行的區域。希望能有所幫助。
我這樣使用:
#elif defined (__sun__)
/* Similar to Linux
* XXX: check zone?
* XXX: illumos kernel automatically mounts /proc on boot
*/
static int ischroot()
{
struct stat st1, st2;
if (stat("/", &st1))
return 2;
if (stat("/proc/1/root", &st2))
return 2;
if ((st1.st_dev == st2.st_dev) && (st1.st_ino == st2.st_ino))
return 1;
return 0;
}
#else
,它是在其他平臺上檢測的事實似乎buglike。如果沒有超級用戶權限,它可能不會被程序檢測到。 – Wug 2012-07-10 13:49:50