注意和ptrace(ptrace()系统调用提供了一个方法,该方法使一个程序(追踪者)可以观察和控制另外一个程序(被追踪者)的执行,并检查和改变被追踪者的内存及寄存器。它主要用于实现断点调试和追踪系统调用。GDB的工作机制)区分
和jstack一样, pstack亦能展现进程的线程堆栈快照, 非常方便验证和性能评估. pstack的作用, 大致可以归纳如下: 1). 查看线程数(比pstree, 包含了详细的堆栈信息) 2). 能简单验证是否按照预定的调用顺序/调用栈执行 3). 采用高频率多次采样使用时, 能发现程序当前的阻塞在哪里, 以及性能消耗点在哪里? 4). 能反映出疑似的死锁现象(多个线程同时在wait lock, 具体需要进一步验证) 当然还能举例更多的作用, 相信使用过jstack的coder, 必然深以为然.
消息队列的实现分为两种,一种为System V的消息队列,一种是Posix消息队列; 消息队列可以认为是一个消息链表,某个进程往一个消息队列中写入消息之前,不需要另外某个进程在该队列上等待消息的达到,这一点与管道和FIFO相反。Posix消息队列与System V消息队列的区别如下:
kill与signals 我们这里所说的kill是指作为shell command的那个kill(相对地,linux系统中还有个叫做kill的system call, man 2 kill可查看其功能及用法),shell终端中输入man kill可以看到,kill的作用是向某个指定的进程或进程组发送指定信号,从而结束该进程/进程组。-s选项可以指定要发送的具体信号,如果没有指定,则默认发送SIGTERM信号至指定进程/进程组,若进程没有捕获该信号的逻辑,则SIGTERM的作用是终止进程。
kill支持发送的信号列表可以通过kill -l查看,而这些信号的具体含义可以通过man 7 signal查看。在我的机器上,man 7 signal输出的POSIX标准信号如下所示(kill支持的信号还有POSIX没有定义的非标准信号,这里没有摘出,感兴趣的同学可以通过man查看)。