Archives

Linux PID namespace

一直对linux内核的namespace感到困惑,今天看了一下代码才知道,原来所谓的namespace其实就是给虚拟化用的,PID namespace其实就是建立一个新的PID空间,这样内部可以使用一套新的PID,而且不会和外部冲突。这也就是说某个进程其实会有两个PID,一个空间一个。

我写了段C代码来展示这个问题。
[c]

include

include

include

include

include

include

static int fork_child(void *arg)
{
int a = (int)arg;
int i;
pid_t pid;

printf("In the container, my pid is: %dn", getpid());
for (i = 0; i < a; i++) {
    pid = fork();
    if (pid < 0)
        return pid;
    else if (pid)
        printf("pid of my child is %dn", pid);
    else if (pid == 0) {
        sleep(3);
        exit(0);
    }
}
return 0;

}

int main(int argc, char argv[])
{
int cpid;
void
childstack, stack;
int flags;
int ret = 0;
int stacksize = getpagesize()
4;

if (argc != 2) {
    fprintf(stderr, "Wrong usage.n");
    return -1;
}

stack = malloc(stacksize);
if (!stack) {
    perror("malloc");
    return -1;
}

printf("Out of the container, my pid is: %dn", getpid());

childstack = stack + stacksize;
flags = CLONE_NEWPID | CLONE_NEWNS;

cpid = clone(fork_child, childstack, flags, (void *)atoi(argv[1]));
printf("cpid: %dn", cpid);

if (cpid < 0) {
    perror("clone");
    ret = -1;
    goto out;
}

fprintf(stderr, "Parent sleeping 20 secondsn");
sleep(20);
ret = 0;

out:
free(stack);
return ret;
}
[/c]

运行结果:

$ sudo ./pid_container 3
Out of the container, my pid is: 7061
cpid: 7062
In the container, my pid is: 1
Parent sleeping 20 seconds
pid of my child is 2
pid of my child is 3
pid of my child is 4

其实被namespace化的不只是PID,还有很多东西,貌似它们合起来被称为container。可以看 include/linux/nsproxy.h:

struct nsproxy {
atomic_t count;
struct uts_namespace uts_ns;
struct ipc_namespace
ipc_ns;
struct mnt_namespace mnt_ns;
struct pid_namespace
pid_ns;
struct net *net_ns;
};

虚拟化的东西是越来越让人摸不清头脑了。。。。

旅行总结(下)

长沙

在长沙终于见到了认识很久的网友,王大大同学。虽然和她聊天感觉她很小气,但实际上一点也不是,她招待得很周到,还有她男友,对我都很好。听她讲了很多湖南话,我总感觉湖南话基本上就是四川话和粤语的混合……

在长沙有两件有意思的事,一件是到长沙那天开始下雪,还比较大,晚上电视台都发不橙色警报了,我琢磨着是不是又会像去年那样,不过还好,第二天不下了,一点儿事也没有;另一件是去长沙火车站时差五分钟就晚了火车!我冲出公交车后基本上是一路飞奔到火车里的,还好有惊无险。

长沙的岳麓书院不错,值得一去。

黄兴南路步行街附近有条小吃街,不错,靠着太平街,我在那里第一次吃湖南臭豆腐,开始感觉臭,越吃越香,吃完感觉很爽!很奇特。

P.S. 在长沙吃的每道菜基本上都有辣子,无语了……

广州

见到了阔别已久的老大,基本上还是那么胖。不过这次终于把老大雪藏已久的“大嫂”给见到了,还拍了N张照片给兄弟们散发了一下。我就不多作什么评论了,要不老大非得杀了我。:-)

老大请我们吃了很多好吃的,我也是头一次尝到了粤菜,对于我一个山东人来说,他们的菜基本上算是没放盐……而且广州人还真吃那些乱七八糟的东西,唉…… 不过汤确实煲得不错。比较遗憾的是,由于老大的失误,我这次没吃到撒尿牛丸。。。

白云山离老大太远,而且爬山太累,所以我就没去。去了趟越秀公园,不错,很美很别致的一个公园,很有广州特色。陈家祠也不错,可惜里面还有的在装修。

最后,来广州一定不能不乘船夜游一下珠江,很美很有情调!记着带上美女哦~!

深圳

深圳基本上没什么好逛的,世界之窗吧,也就那个玻璃架子,欢乐谷吧,也就个游乐园。不过还好,海边的红树林不错,风景挺美。在深圳做的两件比较疯狂的事是:一,吃了一次青蛙,头一次吃,一开始心理上还不好接受,不过确实很好吃,没有枉费我们排队等那一个小时;二,又去了一次酒吧,歌舞那个升平啊。。。。

P.S. 正好赶上参加了深圳LUG的聚会,见到了好几个在网络上素未谋面的朋友,挺有意思的。

福州

感觉福州实在是没什么独特的,和长沙差不多,不过人家长沙至少还有个岳麓书院啊!连陪我逛的小林子都不知道福州有啥好玩的。最后我们就逛了一下五一广场,台江步行街,三坊七巷。小林子带我吃了一下福州菜,基本上全都是海鲜,饼里面有,叫蛎饼;还有海鲜版的煎饼果子,忘了叫啥名了;就连我最后叫的米粉里都有海鲜!海鲜我就能吃个别的鱼和虾,其它软体动物基本上都不能接受……不习惯啊,不习惯~!唉,还有,也是没放盐……

这次旅行就全部结束啦~!多亏各位朋友的帮忙才使得整个旅行有条不紊地按照我的计划全部进行完!走过了很多地方,见到了很多朋友,吃到了很多小吃!当然了,因为时间关系也有不少的遗憾,但毫无疑问,这是一次愉快的旅行!这就是旅行的意义。:-)

希望各位朋友生活更开心幸福!加油!

旅行总结(上)

济南

除了轻轨,基本上没怎么变。

北京

坐地铁,挤死;坐公交,堵死;出去逛,冻死。。。

去了趟颐和园,基本上就滑冰去了!

想去奥运体育馆,基本上没找到!

最大的意外是:发现北京居然也有蓝天,太tmd不可思议了。。。

天津

08年的最后一天,邱曼的生日。

西安

见到了很多同学,老师,朋友~~张老师要有baby啦,陈mm的脸越来越大了~

又去吃了一次建基泡馍,那个爽啊~

通宵了一个晚上,那个疯啊~

还是西安好!

武汉

吃了很多小吃,还专门尝了几种很奇特的武汉小吃,在别的地方从来没有吃过,比如那个糯米卷油条。来武汉一定不要错过户部巷,就像去西安一定要去回民街一样。一般人我不告诉他。:-)

When I was in Portugal ...

When I was in Portugal, Marco told me Chinese guys have eyes like this: -_-

So, now I would like to say:

When I was in Portugal, people there have eyes like this: 0_0

and there are many girls with boobs like this: ( . )^( . )

Orz …

《万历十五年》

刚读完《万历十五年》,感觉这本书和普通的历史书不一样,里面除了叙事以外还有更多的理性分析,颇有西方特色,因为作者是在外生活多年的美籍华人。如果能从这个角度去读历史,自然可以学到很多东西。所以推荐一下此书。

读完之后我最大的疑惑是:我们为什么当初就没有形成像西方那样完善的法律以及法律体制?(貌似到现在也没有)整个明帝国依旧是靠道德的力量对人们进行约束。道德这种东西很多时候说都说不清楚,人和人之间都有争论,很容易沦为某些人的工具。我觉得这也是我们落后的一个重要原因……

旅行计划

喜欢一个人旅行,喜欢在不同的地方碰到不同的人,喜欢看不同的风景,喜欢吃遍各地的小吃!

初步计划:

27号,济南

28,29号,北京

30号,31号,天津

1,2,3号,西安

4,5号,武汉

6,7号,长沙

8,9号,广州

10, 11号,深圳

12,13号,福州

注:上述计划随时有变的可能,请以我的个人最新版为准。:-)

各地的兄弟姐妹们,做好腐败的准备,哈哈哈哈哈哈……

P.S. 备用网址:国际青年旅行社中国国际青年旅行社

获取 CPU 序列号

受lshw的启发,自己动手写了一个获取Intel CPU序列号的小程序,顺便练练gcc内嵌汇编。过程中参考了Intel手册和lshw源代码。:-)

注意:并不是所有的Intel CPU都有序列号。我的CPU就不行,又在别的机器上测的。

[c]

include

typedef struct {
unsigned int eax;
unsigned int edx;
unsigned int ecx;
} cpusn_t;

int getcpusn(cpusnt *sn)
{
sn->eax = 1;
asm (
“cpuidnt”
:”=c”(sn->ecx), “=d”(sn->edx), “=a” (sn->eax)
:”2” (sn->eax)
);
if ((sn->edx & (1<eax = 3;
__asm
(
“cpuidnt”
:”=c”(sn->ecx), “=d”(sn->edx), “=a” (sn->eax)
:”2” (sn->eax)
);
return 0;
}
void print_cpusn(cpusn_t sn)
{
char buf[30];
snprintf(buf, sizeof(buf), “%04X-%04X-%04X-%04X-%04X-%04X”,
sn.eax >> 16, sn.eax & 0xffff,
sn.edx >> 16, sn.edx & 0xffff,
sn.ecx >> 16, sn.ecx & 0xffff);
printf(“%sn”, buf);

}

int main(void)
{
cpusn_t sn = {0, 0, 0};
if (get_cpusn(&sn) == 0) {
print_cpusn(sn);
} else {
//printf(“edx = %xn”, sn.edx);
printf(“Doesn’t support this.n”);
}
return 0;
}
[/c]

解决 Fedora 10 键盘问题

升级到Fedora 10后遇到一个很奇怪的问题:敲Page Up键会输入/,而Page Down键,End键和四个方向键全不能用了。很是诡异,以前从来没遇到过,而且Fedora 9时还是好好的呢。

我找了半天,最后发现,我虽然已经到Fedora 10了,但xorg-x11-drv-evdev包居然还是FC9的!而且还有两个不同版本的!!那很明显,问题应该就在这里了。直接升级它,不行,因为FC9的一个比FC10的还新。于是只好卸载了再装新的,可是因为依赖性关系,要卸载得关联一堆,怎么办呢?强制安装新的,然后再卸载旧的:

sudo rpm —force -ivh Download/xorg-x11-drv-evdev-2.0.7-3.fc10.i386.rpm
sudo rpm -e xorg-x11-drv-evdev-2.0.8-1.fc9.i386

这样就搞定了。

BTW,我在安装这个之前还修改了xorg,把keyborad对应的那部分中的Driver改成:

Driver “evdev”

貌似这似乎也是必须的,我不确定。

再见,葡萄牙!

虽然我一直喜欢说“时间过得真快”,但我还总是惊讶地想再说一次。:-)

我到现在还清楚地记得我第一次踏上葡萄牙这个国家时的情景,第一次在陌生的国家,在Lisboa下了飞机时的不知所措,在Coimbra下了火车时的焦急等待,第一次去公司时的局促不安,第一次和老外们说我那巨烂的英语时的尴尬……那些情景都历历在目啊!而现在,我就要离开这个国家了。

现在说起来惭愧,当我来之前我还想,到这里会不会有歧视?人们会不会因为你是外国人而区别对待你?而现在,我完全可以回答这个问题了,这里的人们对待我很好,有时甚至比他们自己国家的人还要亲切,有的人看我是外国人还想多和我说句话,有的人看我是外国人还给我开善意的玩笑,有的人甚至还给我一些额外的方便……现在想想这些,我为当初有那种想法感到丢人。

初到这个国家时,我总不习惯,总觉得自己个局外人,可是,和这里的人们接触久了,这个国家人们的友好,亲切,热情好客,让我感觉像是在家里一样,如果不是更好的话。我发现,我开始爱上了这里。

怎么能忘记?当Marco看到我使用刀叉不熟练时主动帮我切开,还说就像我们给小孩子做的那样。

怎么能忘记?当我不知道一个英文单词时,同事们互相讨论该怎么解释给我,个个都想告诉我,直到我明白为止。

怎么能忘记?当Carlos搬到我住的这个公寓后,他每天都坚持用他的车带我上下班,每天都邀请我出去一起吃晚饭,即使我在度假。

怎么能忘记?当我有一次早上没有像往常那样去坐公交时,司机还专门向另外一个人关心地问了一下我的情况。

怎么能忘记?当我在电影院想看电影时,售票员不会说英语,但他专门问了好几个人,直到找来一个说英文的来和我沟通。

怎么能忘记?当我在Cascais迷路时,一个好心人主动过来问我是不是迷路了,并指给我正确的路线,看到我仍然不懂时他还坚持要自己带过去,虽然我去的地方和他要去的地方刚好相反。

这里风景很好,不错,但这里的人们更好,是人们,才让这个国家变得那么亲切。我多么希望我们的国家也是这样……

再见,葡萄牙!我一定还会再回来的!

再见,葡萄牙的朋友们,我一定会再来看你们的!希望你们有一天到中国时我也有机会像你们对待我这样来对待你!

Thank you, Ana!!

Yesterday, Ana sent me a cool present! It’s a pen container, plus a small plastic cock made by herself. :-P I really love it.

What is more amazing, she wrote my name in Chinese on the cover!! Wow… See the picture below!

Thank you, Ana!