zoukankan      html  css  js  c++  java
  • 进程与线程

    进程

        pid = fork();来创建子进程,除了PID = 0的进程是由操作系统启动时自动生成的,其他的都是根据已有进程创建的子进程
    子进程“几乎”是父进程的完全复制。
    运行一个进程时想执行另一个程序可使用exec函数族,先fork一个子进程,在里面调用exec执行新进程。(也可直接将一个进程改头换面)。
        exit(——)可用于子进程返回(所有的进程都是子进程。。。),里面的参数会返回给他的父进程,父进程使用wait(&pid)来获取子进程的推出状态,即刚才的参数( waitpid() )  。使用exit退出时会调用退出处理函数、清理I/O缓冲;而_exit却是直接退出。
        守护进程,通常是那些随系统引导时启动,在进程结束时退出。基本操作是将一个子进程变为孤儿进程,会被PID = 1的进程接盘,然后在子进程中创建新会话,改变目录,重设权限,关闭文件描述符。
     
    线程
        创建:pthread_create(), 等待线程结束:pthread_join(),  线程退出:pthread_exit(), 取消线程:pthread_cancel()。
        线程间同步和互斥机制:信号量, 互斥锁, 条件变量。
        信号量sem        初始化:sem_init, P操作:sem_wait, V操作:sem_post, sem_trywait,, sem_getvalue;
        互斥锁mutex        初始化:pthread_mutex_init, 申请:pthread_mutex_lock, 释放:pthread_mutex_unlock
     
    进程间通信
    管道pipe        创建无名管道pipe(int fd[2]), 两个进程中用fdopen打开管道返回文件操作符,可用write,read读写
    管道FIFO        创建:mkfifo, 可以对管道文件进行读写操作,不能lseek。文件内容先进先出。
    信号signal      kill();    raise();    alarm();    pause();    signal();    
    共享内存        shmget()创建共享内存( 可使用ftok()返回特定的key作参数),返回共享内存标识符,共享内存位于3G~4G的内核拥有的内存区域。
    使用shmat映射到需要使用共享内存的进程的内存中(size一样),返回映射到的地址。
    shmdt取消本进程对某个共享内存的映射。(网上说当最后一个进程也取消时,共享内存会自动销毁,但事实并不是如此)。
    shmctl()通过共享内存标识符对共享内存进行操作,可删除。                          
    消息队列msg      msgget返回消息队列ID,(也可使用ftok返回的key作为参数);使用msgctl获取消息队列属性或者删除队列。
     msgsnd往消息队列发送消息,msgrcv获取消息。
    信号灯semaphore        semget获取信号灯集ID(同样使用ftok获得key作为参数);semctl获取/设置/删除信号灯(的值);
    semop进行操作(PV).
     
    进程间通信方式比较
        pipe:具有亲缘关系的进程间,单工,数据在内存中
        fifo:可用于任意进程间,双工,有文件名,数据在内存
        signal:唯一的异步通信方式
        msg:常用于cs模式中,按消息类型访问,可有优先级
        shm:效率最高(直接访问内存),需要同步,互斥机制
        sem:配合共享内存使用,用以实现同步和互斥
  • 相关阅读:
    搜集整理一些Cron表达式例子
    正确处理下载文件时HTTP头的编码问题(Content-Disposition)
    SpringMVC之RequestContextHolder分析
    协变、逆变与不变:数组、泛型、与返回类型
    用java实现一个简单的单用户登陆功能的思路
    为什么要进行URL编码
    spring mvc&mybatis搭配使用心得
    css(二)
    css(一)
    html
  • 原文地址:https://www.cnblogs.com/vsyf/p/4995491.html
Copyright © 2011-2022 走看看