2012-07-10 45 views
1

正在運行的C程序如何檢測它是否在Illumos/solaris上的「chroot」中運行?如何檢測Illumos/solaris上的chroot?

有一個Debian實用程序[1],它在linux,freebsd,hurd上使用了一些技巧。

如何在Illumos/solaris上做到這一點?

[1] http://anonscm.debian.org/gitweb/?p=users/clint/debianutils.git;a=blob;f=ischroot.c;h=bed67f9f655d26906e3d65fd290698dce5402a89;hb=HEAD

+0

,它是在其他平臺上檢測的事實似乎buglike。如果沒有超級用戶權限,它可能不會被程序檢測到。 – Wug 2012-07-10 13:49:50

回答

2

this thread on comp.unix.solaris哪些細節的各種方法以找出是否的Solaris運行的區域(容器/的chroot上大量-的類固醇)或虛擬機內。特別是廣泛the list in this posting(似乎來自this blog post我會重現一些與此區域的項目 - 。那些提供給非root用戶

  • /usr/bin/zonename命令告訴你不同的東西比「全球」
  • Solaris內核‘進程’被稱爲在非分區(或內部sched‘全球’/管理區)的環境,但zsched的區域內。
  • 的的Solaris prstat命令(類似於top其他UN * Xes)有-z/-Z comman d線選項來限制報告到特定區域(-z)或給出所有區域的統計(-Z);在區域內,這些選項不起作用/只顯示您正在運行的區域。

希望能有所幫助。

1

我這樣使用:

#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