当前位置: 技术问答>linux和unix
100分!!! 进程和线程暂停的问题。
来源: 互联网 发布时间:2016-07-01
本文导语: 我现在的状况是。 一个主进程按数据库资源的不同起不同数量的线程, 每个线程做同样的事情,资源共享的问题已经解决, 现在就是如果计算线程超时的问题。 就是在进程里面先等候N秒, 如果有线程没有做完就...
我现在的状况是。
一个主进程按数据库资源的不同起不同数量的线程,
每个线程做同样的事情,资源共享的问题已经解决,
现在就是如果计算线程超时的问题。
就是在进程里面先等候N秒,
如果有线程没有做完就将其杀死。
这个等候N秒,我用了sleep不行,整个进程在等候,包括下面的线程,
就是想用一种方法,使主进程处于等待,但线程仍然在工作。
linux环境。
谢谢各位达人!哈哈!
一个主进程按数据库资源的不同起不同数量的线程,
每个线程做同样的事情,资源共享的问题已经解决,
现在就是如果计算线程超时的问题。
就是在进程里面先等候N秒,
如果有线程没有做完就将其杀死。
这个等候N秒,我用了sleep不行,整个进程在等候,包括下面的线程,
就是想用一种方法,使主进程处于等待,但线程仍然在工作。
linux环境。
谢谢各位达人!哈哈!
|
sleep会让整个进程休眠,可以使用linux系统计时器或者硬件计时器,你可以参考一下
http://www.ibm.com/developerworks/cn/linux/l-cn-clocks/
http://www.ibm.com/developerworks/cn/linux/l-cn-clocks/
|
Linux实现了7个POSIX 1003.1e规定的能力,还有21个(截止到2.6.13版本的内核)Linux所特有的,这些能力在/usr/src/linux/include/linux/capability.h文件中定义。其细节如下:
能力 编号 解释
CAP_CHOWN 0 允许改变文件的所有权
CAP_DAC_OVERRIDE 1 忽略对文件的所有DAC访问限制
CAP_DAC_READ_SEARCH 2 忽略所有对读、搜索操作的限制
CAP_FOWNER 3 如果文件属于进程的UID,就取消对文件的限制
CAP_FSETID 4 允许设置setuid位
CAP_KILL 5 允许对不属于自己的进程发送信号
CAP_SETGID 6 允许改变组ID
CAP_SETUID 7 允许改变用户ID
CAP_SETPCAP 8 8 允许向其它进程转移能力以及删除其它进程的任意能力
CAP_LINUX_IMMUTABLE 9 允许修改文件的不可修改(IMMUTABLE)和只添加(APPEND-ONLY)属性
CAP_NET_BIND_SERVICE 10 允许绑定到小于1024的端口
CAP_NET_BROADCAST 11 允许网络广播和多播访问
CAP_NET_ADMIN 12 允许执行网络管理任务:接口、防火墙和路由等,详情请参考/usr/src/linux/include/linux/capability.h文件
CAP_NET_RAW 13 允许使用原始(raw)套接字
CAP_IPC_LOCK 14 允许锁定共享内存片段
CAP_IPC_OWNER 15 忽略IPC所有权检查
CAP_SYS_MODULE 16 插入和删除内核模块
CAP_SYS_RAWIO 17 允许对ioperm/iopl的访问
CAP_SYS_CHROOT 18 允许使用chroot()系统调用
CAP_SYS_PTRACE 19 允许跟踪任何进程
CAP_SYS_PACCT 20 允许配置进程记帐(process accounting)
CAP_SYS_ADMIN 21 允许执行系统管理任务:加载/卸载文件系统、设置磁盘配额、开/关交换设备和文件等。详情请参考/usr/src/linux/include/linux/capability.h文件。
CAP_SYS_BOOT 22 允许重新启动系统
CAP_SYS_NICE 23 允许提升优先级,设置其它进程的优先级//
CAP_SYS_RESOURCE 24 忽略资源限制
CAP_SYS_TIME 25 允许改变系统时钟
CAP_SYS_TTY_CONFIG 26 允许配置TTY设备
CAP_MKNOD 27 允许使用mknod()系统调用
CAP_LEASE 28 Allow taking of leases on files
能力 编号 解释
CAP_CHOWN 0 允许改变文件的所有权
CAP_DAC_OVERRIDE 1 忽略对文件的所有DAC访问限制
CAP_DAC_READ_SEARCH 2 忽略所有对读、搜索操作的限制
CAP_FOWNER 3 如果文件属于进程的UID,就取消对文件的限制
CAP_FSETID 4 允许设置setuid位
CAP_KILL 5 允许对不属于自己的进程发送信号
CAP_SETGID 6 允许改变组ID
CAP_SETUID 7 允许改变用户ID
CAP_SETPCAP 8 8 允许向其它进程转移能力以及删除其它进程的任意能力
CAP_LINUX_IMMUTABLE 9 允许修改文件的不可修改(IMMUTABLE)和只添加(APPEND-ONLY)属性
CAP_NET_BIND_SERVICE 10 允许绑定到小于1024的端口
CAP_NET_BROADCAST 11 允许网络广播和多播访问
CAP_NET_ADMIN 12 允许执行网络管理任务:接口、防火墙和路由等,详情请参考/usr/src/linux/include/linux/capability.h文件
CAP_NET_RAW 13 允许使用原始(raw)套接字
CAP_IPC_LOCK 14 允许锁定共享内存片段
CAP_IPC_OWNER 15 忽略IPC所有权检查
CAP_SYS_MODULE 16 插入和删除内核模块
CAP_SYS_RAWIO 17 允许对ioperm/iopl的访问
CAP_SYS_CHROOT 18 允许使用chroot()系统调用
CAP_SYS_PTRACE 19 允许跟踪任何进程
CAP_SYS_PACCT 20 允许配置进程记帐(process accounting)
CAP_SYS_ADMIN 21 允许执行系统管理任务:加载/卸载文件系统、设置磁盘配额、开/关交换设备和文件等。详情请参考/usr/src/linux/include/linux/capability.h文件。
CAP_SYS_BOOT 22 允许重新启动系统
CAP_SYS_NICE 23 允许提升优先级,设置其它进程的优先级//
CAP_SYS_RESOURCE 24 忽略资源限制
CAP_SYS_TIME 25 允许改变系统时钟
CAP_SYS_TTY_CONFIG 26 允许配置TTY设备
CAP_MKNOD 27 允许使用mknod()系统调用
CAP_LEASE 28 Allow taking of leases on files
|
sleep 可能导致整个进程休眠,
使用 select 看看。
使用 select 看看。
|
很容易啊,你主进程开个alarm就是了。
然后在SIGALRM的触发函数里杀死你的线程就ok了啊。
http://linux.ccidnet.com/art/302/20071226/1322683_1.html
然后在SIGALRM的触发函数里杀死你的线程就ok了啊。
http://linux.ccidnet.com/art/302/20071226/1322683_1.html
|
pthread_join 能够等待线程结束。
|
select应该满足lz要求
|
pthread_join 和pthread_detach 两个函数都可以实现你想要的
|
我很疑惑!在启动其他的线程后,主线程sleep会导致其他线程也休眠吗?usleep也会?
如果用alarm的话,会很危险啊!如果其他的线程也有用到alarm的话,后果是很难预料的!
不用sleep的话,你可以单开一个线程计时Ns,然后在开启所有线程后,用pthread_join等待这个线程结束。
然后用pthread_kill检查哪些线程存在或者用它将线程都杀死。
如果用alarm的话,会很危险啊!如果其他的线程也有用到alarm的话,后果是很难预料的!
不用sleep的话,你可以单开一个线程计时Ns,然后在开启所有线程后,用pthread_join等待这个线程结束。
然后用pthread_kill检查哪些线程存在或者用它将线程都杀死。
|
或者用select计时
|
再或者 struct timespec delay;
delay.tv_sec = 2;
delay.tv_nsec = 0;
pthread_delay_np( &delay );
delay.tv_sec = 2;
delay.tv_nsec = 0;
pthread_delay_np( &delay );