如何检测正在运行的C程序是否在illumos/solaris上的"chroot“中运行?
有一个Debian实用程序1,它在linux,freebsd,hurd上使用了一些技巧。
如何在illumos/solaris上做到这一点?
1
发布于 2012-07-13 17:11:47
有一个this thread on ,它详细介绍了不同的方法来确定Solaris是在一个区域(容器/chroot-on-on-of-steroid)还是VM中运行。特别广泛的是the list in this posting (似乎来自this blog post。我将在这里重新创建一些与区域相关的项-那些可供非root用户使用的项。
/usr/bin/zonename命令告诉您一些与“全局”进程不同的信息。在非分区(或“全局”/管理区域内)环境中,sched,但在区域内称为zsched。prstat命令(类似于其他UN*‘t上的top )具有-z / -Z命令行选项,可将报告限制为特定区域(-z)或提供所有区域的统计信息(-Z);在区域内,这些选项不起作用/仅显示您正在运行的区域。希望这能帮上点忙。
发布于 2014-07-27 04:56:50
我是这样使用的:
#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;
}
#elsehttps://stackoverflow.com/questions/11414705
复制相似问题