摘要: (转载)http://hi.baidu.com/gropefor/item/da814aaadfbd53f215329bb6摘要:本文简要介绍了LINUX多线程编程中分离线程的概念并给出了使用pthread库时需要用到分离线程的程序实例。关键字:分离线程,detach,pthread_create,pthread_detach,ENOMEM,12 线程一般有分离和非分离两种状态。默认的情形下是非分离状态,父线程维护子线程的某些信息并等待子线程的结束,在没有显示调用join的情形下,子线程结束时,父线程维护的信息可能没有得到及时释放,如果父线程中大量创建非分离状态的子线程(在LINUX系统中使用 阅读全文
posted @ 2013-05-01 23:30 robotke1 阅读(375) 评论(0) 推荐(0)
摘要: (转载)http://blog.csdn.net/wangsifu2009/article/details/6766365(1)进程组 每个进程除了有一个进程ID之外,还属于一个进程组。进程组是一个或多个进程的集合。通常,它们与同一作业相关联,可以接收来自同一终端的各种信号。每个进程组有一个唯一的进程组ID。每个进程组都可以有一个组长进程。组长进程的标识是,其进程组ID等于其进程ID。组长进程可以创建一个进程组,创建该组中的进程,然后终止。只要在某个进程组中一个进程存在,则该进程组就存在,这与其组长进程是否终止无关。(2)作业 Shell分前后台来控制的不是进程而是作业(Job)或者进程组(P 阅读全文
posted @ 2013-05-01 23:20 robotke1 阅读(305) 评论(0) 推荐(0)
摘要: (转载)http://www.cnblogs.com/update158/articles/f23465.htmlvs2010 调试快捷键命令名 快捷键 说明 调试.应用代码更改Alt + F10启动生成操作,利用它可以通过“编辑并继续”功能应用对正在调试的代码所作的更改。调试.自动窗口Ctrl + D,Ctrl + A显示“自动”窗口,以查看在当前过程中,目前所执行中的变量的值。 调试.全部中断Ctrl + Alt + Break临时停止执行调试会话中的所有进程。仅可用于“运行”模式。调试.在函数处中断Ctrl + D,Ctrl + N显示“新断点”对话框。调试.断点Ctrl + D,Ctr 阅读全文
posted @ 2013-05-01 22:50 robotke1 阅读(208) 评论(0) 推荐(0)
摘要: (转载)http://blog.chinaunix.net/uid-23089249-id-210808.html一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁, 而是留下一个称为僵死进程(Zombie)的数据结构(系统调用exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵死进程,并不能将其完全销毁)。一、僵死进程的产生 在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等,但是仍然为其保留一定的信息(包括进程号the process ID,退出状态the termination status of the process, 阅读全文
posted @ 2013-05-01 22:38 robotke1 阅读(206) 评论(0) 推荐(0)
摘要: (转载)http://blog.csdn.net/gnuhpc/article/details/7185658(1)zombie进程(僵尸进程):任何一个进程,当其运行结束(exit)之后,其使用的所有资源和内存空间都会释放,以供其他进程使用;但其在OS内核的process table中仍旧保留一条记录,包含该进程的process ID,退出状态exit status,运行时间等信息。这些信息是方便该进程的父进程随时获取它的exit status(即子进程结束后为什么要进入zombie状态)。Unix/Unix-like系统中,把已经执行结束但process table中记录未被清除的进程称为 阅读全文
posted @ 2013-05-01 22:30 robotke1 阅读(462) 评论(0) 推荐(0)
摘要: (转载)http://blog.csdn.net/chinalinuxzend/article/details/2270260原贴:http://groups.google.com/group/riverbird2005/browse_thread/thread/6814aca2d1943d32 今天dot.kde登了一篇对valgrind的作者 Jonathan Riddell 的访谈。我作为valgrind的老用户,当年调程序时获益 很多,在这篇访谈里进一步长了见识,深感有必要把这个优秀的开发工具介绍给诸位。以下内容多翻译自该访谈(意译啦)。 啥是valgrind Valgrind是帮.. 阅读全文
posted @ 2013-05-01 22:19 robotke1 阅读(389) 评论(0) 推荐(0)
摘要: 原贴:http://www.it414.com/show/10099Linux下检查内存泄漏、系统性能的系列工具Pub Date:2008-02-16 10:45:34 Author: moon Click:1641、定位内存泄漏问题 在我先前的博客文章中我介绍了如何在Windows .NET环境下如何定位内存泄漏问题,今天我就来介绍一个在Linux下定位此类问题的工具Valgrind和Callgrind,以及基于Callgrind分析结果的GUI分析工具KCachegrind。Callgrind和KCachegrind在后面的专题讲。 首先介绍Valgrind,网址是:http://valg 阅读全文
posted @ 2013-05-01 22:08 robotke1 阅读(516) 评论(0) 推荐(0)
摘要: (1)删除匹配“每行以pattern开头”的行:g/^pattern/d(2)删除匹配“每行以pattern结尾”的行:g/pattern$/d 阅读全文
posted @ 2013-05-01 21:25 robotke1 阅读(628) 评论(0) 推荐(0)
摘要: (转载)http://blog.csdn.net/newjueqi/article/details/7441930http://zh.wikipedia.org/wiki/Vim#.E6.99.AE.E9.80.9A.E6.A8.A1.E5.BC.8F模式从vi演生出来的Vim具有多种模式,这种独特的设计容易使初学者产生混淆。几乎所有的编辑器都会有插入和执行命令两种模式,并且大多数的编辑器使用了与Vim截然不同的方式:命令目錄(鼠标或者键盘驱动),组合键(通常通过control键(CTRL)和alt键(ALT)组成)或者鼠标输入。Vim和vi一样,仅仅通过键盘来在这些模式之中切换。这就使得Vi 阅读全文
posted @ 2013-05-01 21:16 robotke1 阅读(305) 评论(0) 推荐(0)
摘要: (1)删除包含特定字符的行:g/pattern/d(全局范围内):1,20g/pattern/d(删除1~20行内匹配的行)(2)删除不匹配的行:v/pattern/d:g!/pattern/d 阅读全文
posted @ 2013-05-01 21:06 robotke1 阅读(1668) 评论(0) 推荐(0)
摘要: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <unistd.h> 5 #include <semaphore.h> 6 #include <sys/types.h> 7 #include <dirent.h> 8 #include <pthread.h> 9 #include <errno.h>10 #include <signal.h>11 #include < 阅读全文
posted @ 2013-05-01 20:26 robotke1 阅读(761) 评论(0) 推荐(0)
摘要: (1)通过全局变量进行传递struct food{ int a; int b; int c;};struct food apple;void* task1(void* arg){ apple.a = 27; apple.b = 12; apple.c = 39; pthread_exit((void*)&apple);}int main(int argc, char *argv[]){ pthread_t thrd1, thrd2, thrd3; void* tret; pthread_create(&thrd1, NULL, (vo... 阅读全文
posted @ 2013-05-01 20:06 robotke1 阅读(481) 评论(0) 推荐(0)
摘要: 进程中的任一线程调用了exit,_Exit或者_exit,那么整个进程都会终止。 单个线程在不终止整个进程的情况下停止它的控制流,有三种方式:(1)线程只是从启动例程中返回,返回值是线程的退出码。(2)线程可以被同一进程中的其他线程取消。(3)线程调用pthread_exit。1、单个线程调用exit,_Exit或者_exitvoid* task1(void* arg){ while (1) {sleep(1);printf("thread1 running...\n");} return NULL;}void* task2(void *arg){ while (1) {s 阅读全文
posted @ 2013-05-01 18:25 robotke1 阅读(503) 评论(0) 推荐(0)
摘要: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <unistd.h> 5 #include <semaphore.h> 6 #include <sys/types.h> 7 #include <dirent.h> 8 #include <pthread.h> 9 #include <errno.h>10 #include <signal.h>11 #include < 阅读全文
posted @ 2013-05-01 15:48 robotke1 阅读(337) 评论(0) 推荐(0)
摘要: (转载)http://www.cnblogs.com/mydomain/archive/2011/08/14/2138454.html(2)线程的分离与结合(a) 在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。(b)一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。(c)相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。线程的分离状态决定一个线程以什么样的方式来终止自己。在上面的例子中,我们采用了线程的默认属性,即为非分离状态(即可结合的,joinable, 阅读全文
posted @ 2013-05-01 15:20 robotke1 阅读(167) 评论(0) 推荐(0)
摘要: (转载)http://blog.csdn.net/xinu2009/article/details/6768133信号量的数据类型为结构sem_t,它本质上是一个长整型的数。------函数sem_init()用来初始化一个信号量。 它的原型为: extern int sem_init __P ((sem_t *__sem, int __pshared, unsigned int __value));sem为指向信号量结构的一个指针;pshared不为0时此信号量在进程间共享,否则只能为当前进程的所有线程共享;value给出了信号量的初始值。-----函数sem_post( sem_t *se 阅读全文
posted @ 2013-05-01 14:36 robotke1 阅读(262) 评论(0) 推荐(0)
摘要: (转载)http://blog.chinaunix.net/uid-14966892-id-2780401.htmlHere is an answer from the "Frequently Asked Questions about the GNU C Library" (the FAQ):4.9. How can I find out which version of glibc I am using in the moment?{UD} If you want to find out about the version from the command line s 阅读全文
posted @ 2013-05-01 14:33 robotke1 阅读(433) 评论(0) 推荐(0)