ps axj命令查看系统中的进程。参数a表示不仅列当前用户的进程,也列出所有其他用户的进程,参数x表示不仅列有控制终端的进程,也列出所有无控制终端的进程,参数j表示列出与作业控制相关的信息;

凡是TPGID一栏写着-1的都是没有控制终端的进程,也就是守护进程;

COMMAND一列用[]括起来的名字表示内核线程,这些线程在内核里创建,没有用户空间代码,因此没有程序文件名和命令行,通常采用以k开头的名字,表示Kernel;

udevd负责维护/dev目录下的设备文件,acpid负责电源管理,syslogd负责维护/var/log下的日志文件,可以看出,守护进程通常采用以d结尾的名字,表示Daemon;

创建守护进程最关键的一步是调用setsid函数创建一个新的Session,并成为Session Leader;

创建守护进程;

aaarticlea/png;base64,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" alt="" />

线程库函数是由POSIX标准定义的,称为POSIX thread或者pthread。在Linux上线程函数位于libpthread共享库中,因此在编译时要加上-lpthread选项;

aaarticlea/png;base64,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" alt="" />

终止线程

如果需要只终止某个线程而不终止整个进程,可以有三种方法:

  • 从线程函数return。这种方法对主线程不适用,从main函数return相当于调用exit

  • 一个线程可以调用pthread_cancel终止同一进程中的另一个线程。

  • 线程可以调用pthread_exit终止自己。

线程可以调用pthread_join得到start_routine的返回值;

调用该函数的线程将挂起等待,直到id为thread的线程终止。thread线程以不同的方法终止,通过pthread_join得到的终止状态是不同的,总结如下:

  • 如果thread线程通过return返回,value_ptr所指向的单元里存放的是thread线程函数的返回值。

  • 如果thread线程被别的线程调用pthread_cancel异常终止掉,value_ptr所指向的单元里存放的是常数PTHREAD_CANCELED

  • 如果thread线程是自己调用pthread_exit终止的,value_ptr所指向的单元存放的是传给pthread_exit的参数。

如果对thread线程的终止状态不感兴趣,可以传NULLvalue_ptr参数。

一般情况下,线程终止后,其终止状态一直保留到其它线程调用pthread_join获取它的状态为止。但是线程也可以被置为detach状态,这样的线程一旦终止就立刻回收它占用的所有资源,而不保留终止状态。不能对一个已经处于detach状态的线程调用pthread_join,这样的调用将返回EINVAL。对一个尚未detach的线程调用pthread_joinpthread_detach都可以把该线程置为detach状态,也就是说,不能对同一线程调用两次pthread_join,或者如果已经对一个线程调用了pthread_detach就不能再调用pthread_join了。

#include <pthread.h>

int pthread_detach(pthread_t tid);

对于多线程的程序,访问冲突的问题是很普遍的,解决的办法是引入互斥锁(Mutex,Mutual Exclusive Lock),获得锁的线程可以完成“读-修改-写”的操作,然后释放锁给其它线程,没有获得锁的线程只能等待而不能访问共享数据,这样“读-修改-写”三步操作组成一个原子操作,要么都执行,要么都不执行,不会执行到中间被打断,也不会在其它处理器上并行做这个操作。

Mutex用pthread_mutex_t类型的变量表示,可以这样初始化和销毁:

#include <pthread.h>

int pthread_mutex_destroy(pthread_mutex_t *mutex);
int pthread_mutex_init(pthread_mutex_t *restrict mutex,
const pthread_mutexattr_t *restrict attr);
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

Mutex的加锁和解锁操作可以用下列函数:
#include <pthread.h>

int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);

一个线程可以调用pthread_mutex_lock获得Mutex,如果这时另一个线程已经调用pthread_mutex_lock获得了该 Mutex,则当前线程需要挂起等待,直到另一个线程调用pthread_mutex_unlock释放Mutex,当前线程被唤醒,才能获得该 Mutex并继续执行。

如果一个线程既想获得锁,又不想挂起等待,可以调用pthread_mutex_trylock,如果Mutex已经被另一个线程获得,这个函数会失败返回EBUSY,而不会使线程挂起等待。

aaarticlea/png;base64,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" alt="" />

想尽方法仅仅执行一条指令,保证操作原子性;

用pthread_mutex_trylock调用代替pthread_mutex_lock调用,以免死锁;

linux进程,作业,守护进程,进程间同步的更多相关文章

  1. linux centos Supervisor守护.netcore进程安装配置

    场景:当部署完.netcore程序后 使用dotnet xx.dll 后可以运行,但关闭shell或隔断时间会自动断开,此时部署的.netcore程序就不能访问了,此时需要用到Supervisor了 ...

  2. 用 C# 来守护 Python 进程

    背景 目前我主要负责的一个项目是一个 C/S 架构的客户端开发,前端主要是通过 WPF 相关技术来实现,后端是通过 Python 来实现,前后端的数据通信则是通过 MQ 的方式来进行处理.由于 Pyt ...

  3. linux信号量之进程间同步

    概念 linux信号量: 允许多个线程同时进入临界区,可以用于进程间的同步. 和互斥锁(mutex)的区别: 互斥锁只允许一个线程进入临界区. 所在头文件: semaphore.h 主要函数 初始化函 ...

  4. linux应用编程之进程间同步

    一.描述 在操作系统中,异步并发执行环境下的一组进程,因为相互制约关系,进而互相发送消息.互相合作.互相等待,使得各进程按一定的顺序和速度执行,称为进程间的同步.具有同步关系的一组并发进程,称为合作进 ...

  5. Linux系统编程—进程间同步

    我们知道,线程间同步有多种方式,比如:信号量.互斥量.读写锁,等等.那进程间如何实现同步呢?本文介绍两种方式:互斥量和文件锁. 互斥量mutex 我们已经知道了互斥量可以用于在线程间同步,但实际上,互 ...

  6. Linux进程学习(孤儿进程和守护进程)

    孤儿进程和守护进程 通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程.现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程如 ...

  7. Linux编程实现守护进程

    Linux 守护程序 守护进程(Daemon)它是在一个特定的过程的背景进行.它独立于控制终端的和周期性地执行某些任务或待某些事件.是一种非常实用的进程. Linux的大多数server就是用守护进程 ...

  8. 详解Linux进程(作业)的查看和杀死

    目录: 引入进程 进程 线程 PS命令 TOP命令 其他查看进程命令 进程的优先级 作业控制机制 kill命令 一.引入进程 1.内存划分为:用户空间和内核空间 1.在用户空间里运行的进程,就是用户进 ...

  9. Linux进程作业的查看和杀死

    引入进程 进程 线程 PS命令.TOP命令.其他查看进程命令 进程的优先级 作业控制机制 kill命令 一.引入进程 1.内存划分为:用户空间和内核空间 1.在用户空间里运行的进程,就是用户进程,所属 ...

随机推荐

  1. HIVE 的MAP/REDUCE

    对于 JOIN 操作: Map: 以 JOIN ON 条件中的列作为 Key,如果有多个列,则 Key 是这些列的组合 以 JOIN 之后所关心的列作为 Value,当有多个列时,Value 是这些列 ...

  2. Css3 圆角和渐变色问题(IE9)

    border-radius: 4px; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#569B0E', endC ...

  3. hdu 1828 Picture(线段树 || 普通hash标记)

    http://acm.hdu.edu.cn/showproblem.php?pid=1828 Picture Time Limit: 6000/2000 MS (Java/Others)    Mem ...

  4. python multiprocessing 多进程

    ''' 如果要启动大量的子进程,可以用进程池的方式批量创建子进程: ''' def test_task(name): print 'Run task %s (%s)...' % (name, os.g ...

  5. codeforces 391C3 - The Tournament

    在第8组数据上WA了一天,后来才发现问题: #include<iostream> #include<cstdio> #include<cstring> #inclu ...

  6. single page

    http://msdn.microsoft.com/zh-cn/magazine/cc507641.aspx#S7 http://blog.nodejitsu.com/scaling-isomorph ...

  7. 创建型-生成器模式(Builder)

    1.意图: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 2.场景描述: 编辑软件的“另存为”功能便是生成器模式的一个体现.例如,Word的另存为功能,可以选择将文件存储 ...

  8. ORMBase对象/关系型数据库映射在MVC中的应用(二)

    3.DataBase基类,查询方法返回值是List<T>,并且是分页的,ThePart.dll版本2.0中封装了一个PageInfo类,作为分页的类型.这种方法很机械,也很狗血..建议大家 ...

  9. Ubuntu14.04下如何开启Mysql远程访问

    近来开发项目的需要,需要开启服务器下的Mysql远程访问权限(方法有很多),学习了一下,这里只演示个人觉得比较简单的一种方法. 对用户授权方法: 1. 在目录/etc/mysql下找到my.cnf,用 ...

  10. Android Integer.decode()和Intger.valueof()

    decode合适用来分析数字 可以分析 8进:010=>分析后为 8 10进:10=>分析后为 10 16进:#10|0X10|0x10=>分析后是 16 而valueof    只 ...