读书时间 05/25/2011 Linux C/C++ 孤儿进程

来源:互联网 发布:mac如何查看系统日志 编辑:程序博客网 时间:2024/05/19 00:42

《Linux高级程序设计》2nd version,杨宗德


1. 杂问

 

2. 孤儿进程

[root@frank orphan]# cat orphan.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
        pid_t pid;
        if ((pid=fork())==-1) {
                perror("fork!");
        } else if (pid==0) {
                printf("pid=%d, ppid=%d/n", getpid(), getppid());
                sleep(2);
                printf("pid=%d, ppid=%d/n", getpid(), getppid());
        } else {
                exit(0);
        }
}
注:父进程先退出了,子进程被init进程(id=1)收养。

 

2. 僵尸进程

 

[root@frank zombe]# cat dead-p.c
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main() {
        pid_t pid;
        if ((pid=fork())==-1) {
                perror("fork!");
        } else if(pid==0) {
                system("ps");
                printf("Child pid = %d/n", getpid());
                exit(0);
        }

        sleep(3);
        system("ps");
        exit(0);
}

 

[root@frank zombe]# ./deadp
  PID TTY          TIME CMD
 5279 pts/1    00:00:00 bash
 5399 pts/1    00:00:00 deadp
 5400 pts/1    00:00:00 deadp
 5401 pts/1    00:00:00 ps
Child pid = 5400
  PID TTY          TIME CMD
 5279 pts/1    00:00:00 bash
 5399 pts/1    00:00:00 deadp
 5400 pts/1    00:00:00 deadp <defunct>
 5402 pts/1    00:00:00 ps

注:子进程先退出,但资源没有释放,成为僵尸(defunct)?

 

3. 组播

IP:230.1.1.1->MAC:01:00:53:1.1.1

                                   ^MAC组播头       

                                               ^ 后23bit从IP复制 

Q:局域网内所有主机网卡都会收到组播包,但网卡驱动程序如何确定是否传给IP层?是否网卡驱动有办法设置自己是否属于某个组播组?

 

4. chap 15 做一个xinetd服务

* 写服务代码

[root@frank xinetd]# cat daytime_inetd.c
#include <time.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
#include <fcntl.h>
#include <sys/param.h>
#include <sys/syslog.h>

#define MAXLINE 4096

int main(int argc, char **argv) {
        socklen_t len;
        struct socketaddr *cliaddr;
        char buff[MAXLINE];
        time_t ticks;

        ticks = time(NULL);
        snprintf(buff, sizeof(buff), "%.24s/r/n", ctime(&ticks));
        write(0, buff, strlen(buff));

        close(0);
        exit(0);
}

* 配置启动项

/etc/xinetd.d/daytime_inetd

 

root@frank xinetd]# cat /etc/xinetd.d/daytime_inetd
service daytime_inetd
{
        disable = no
        flags = REUSE
        sock_type = stream
        wait = no
        user = root
        server = /study/run/daytime_inetd
        log_on_failure += USERID
}

* 配置服务应用端口

/etc/services

 

[root@frank xinetd.d]# cat /etc/services | grep daytime_inetd
# my new service: daytime_inetd
daytime_inetd 8888/tcp
[root@frank xinetd.d]#

* 重启服务xinetd

# service xinetd restart

 

Q:不知为什么没有work !!!

 

5. laptop中配置samba,下载book程序源代码

Q:找不到Samba相关的命令

[root@localhost init.d]# /etc/init.d/smb restart
-bash: /etc/init.d/smb: 没有那个文件或目录

 

终于通过Linux图形界面中的ftp程序把source下载了!!! (22:00)

 

 

 

 

 

原创粉丝点击