正在运行的C程序如何检测它是否在illumos / solaris上的“chroot”中运行?
有一个Debian实用程序[1]在linux上使用了一些技巧,freebsd,hurd。
如何在illumos / solaris上做到这一点?
答案 0 :(得分:2)
有this thread on comp.unix.solaris详细说明了各种方法,以确定Solaris是在区域内运行(容器/ chroot-on-lots-of-steroids)还是VM。特别广泛的是the list in this posting(似乎来自this blog post。我将重新创建一些与区域相关的项目 - 非root用户可以使用的项目。
/usr/bin/zonename
命令告诉您与“全局”sched
,但在区域内称为zsched
。 prstat
命令(类似于其他UN * Xes上的top
)具有-z
/ -Z
命令行选项,用于限制向特定区域的报告({{1 }}或提供所有区域的统计信息(-z
);在区域内,这些选项不起作用/仅显示您正在内部运行的区域。希望有所帮助。
答案 1 :(得分: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