我需要从siginfo_t结构中检索子进程的PID。此代码适用于Solaris:
siginfo_t *info;
//
// siginfo is initialized with proper data here
//
pid = info->__data.__proc.__pid;
但是当我试图将我的代码移植到Linux时,我得到了一个编译错误:
error: ‘siginfo_t’ has no member named ‘__data’
pid = info->__data.__proc.__pid;
这是Solaris上siginfo_t的定义(来自signal.h)
我在Ubuntu上运行Rails,使用的是Nginx web服务器和5个瘦应用服务器。
每天一次,系统变得非常慢,有时会挂断。
我不确定是否是瘦服务器,但当我在挂起时停止服务器时,我会得到:
Can't stop process, no PID found in tmp/pids/thin.3000.pid
以下是显示精简启动和停止的日志:
bitnami@linux:/opt/bitnami$ thin -C projects/myapp/current/config/thin.yml start
Starting server on 127.0.0.1:3000 ...
Start
我知道在pthread_self()和syscall(SYS_gettid)之间。pthread_create()生成一个POSIX线程ID,该ID由通常定义为unsigned long int的结构pthread_t表示。我们可以使用pthread_self获取由pthread_create生成的。
使用strace,我知道libpthread.so.0中的pthread_create()是通过调用clone系统调用来实现的,这也是用于fork()的系统调用。在通过调用pthread_create()创建POSIX线程之后,将生成一个新的POSXI线程(由pthread_self()返回的线