Articles of 处理

乘客进程已经运行? 但不是

试图启动客运独立与passenger start -p 80 ,它说它已经运行,但是当我做一个passenger stop -p 80我得到According to the PID file '/var/crm/tmp/pids/passenger.80.pid', Phusion Passenger Standalone doesn't seem to be running. 但显然不是因为当我试图阻止它,它说它没有运行,我不能从networking上访问它 [root@technetium crm]# passenger start -p 80 *** ERROR *** The address 0.0.0.0:80 is already in use by another process, perhaps another Phusion Passenger Standalone instance. If you want to run this Phusion Passenger […]

是否只有一个Python解释器执行多个并发脚本?

我有一个Python脚本,它使用REST API以10MB的块向服务器发送4GB的数据。 无论我同时调用多less个脚本,我都能得到与客户端(10Gbnetworking,服务器类系统)完全相同的整体吞吐量: 1调用= 300MB / s 2个调用= 300MB / s 4个调用= 300MB / s 8个调用= 300MB / s 起初我虽然是某种磁盘读取限制,但我修改了脚本,以便它不需要硬盘驱动器访问,并使用最小的内存,我仍然得到完全相同的吞吐量。 执行期间的CPU和内存使用量是最小的。 进一步研究,我读了Python解释器是单线程的。 这很好(我猜是有道理的),但是尽pipe多个Python脚本被同时调用,是否有可能一次只调用一个Python解释器实例?

中断ID到名称映射

我正在Linux系统上运行一些基准testing,并logging中断的ID。 我想将中断ID映射到它的名字。 例如,中断号码。 7对应于pagefaultexception。 猫/ proc /中断不帮助。 在这个文件中,有些中断是由它们的ID标识的(例如,定时器中断为0),而一些中断则由一个低温MACRO(例如:用于性能监视中断的PMI)

在进程调用之间传输数据

我有一个被称为无数次的Linux进程,我需要尽快完成这个过程。 问题是,我必须保持一个状态之间的调用(从以前的调用加载数据,并将其存储下一个),而不运行另一个进程/守护进程。 你能build议快速的方法吗? 我知道我可以使用文件的I / O,并希望避免它,出于明显的性能原因。 应该(可以吗?)我创build一个命名pipe道来读/写和避免真正的磁盘I / O?

如何捕捉两个以上的连续信号?

如果我发送多个后续的Hangup信号到下面的程序,只有两个会被处理,其余的将被忽略: #include <stdio.h> #include <unistd.h> #include <signal.h> int id; void handler(int s) { id++; int i; for(i=0; i<3; i++) { printf("Sig %d\n", id); sleep(2); } } int main() { int i; signal(SIGHUP, handler); for( i=0; ; i++ ) { printf("%d\n", i); sleep(1); } return 0; } 我使用以下命令将信号发送到进程: kill -l {#process} 如果连续三次运行上述命令,第三个信号将被忽略,如下面的输出: 0 1 2 3 […]

将图像从TrueColor更改为1Bpp调色板?

是否有一种简单的方法,将TrueColor图像(本例中为24位,位图)转换为1Bpp图像(调色板,转换为位图)。 我知道的imagemagick转换哪个可以做转换,但由于某种原因,当我试着用转换types的调色板-depth 7 truecolor.bmp 1bpp.bmp 我知道你是以编程的方式做的,但是没有一个更简单的方法吗? 谢谢

正确的方式来使用信号处理程序

什么是使用信号处理程序的正确方法? 我看到下面这个问题的代码,并想知道为什么你仍然需要把signal(SIGSEGV,sig_func); 在sig_func里面? 当进程收到一个SIGSEGV信号时,不会创build一个无止境的循环吗? void sig_func(int sig) { write(1, "Caught signal 11\n", 17); signal(SIGSEGV,sig_func); } int main() { signal(SIGSEGV,sig_func); //Install the signal handler //Do work here }

为什么我们调用Signal Handler两次?

我是使用c语言进行信号处理的新手。 我正在分析从特定资源中提取的信号处理代码。 这是代码。 #include <stdio.h> #include <signal.h> void intproc(); void quitproc(); main() { int i; signal(SIGINT,intproc); signal(SIGQUIT,quitproc); printf("Ctrl+c is disabled. Use ctrl+\\ to quit\n"); for (i=0;;i++) { printf("In an infinite loop…\n"); sleep(200); } } void intproc() { signal(SIGINT,intproc); printf("You have pressed ctrl+c.\n"); } void quitproc() { signal(SIGQUIT,intproc); printf("You have pressed ctrl+\\. Now the program quits.\n"); […]

在Solaris和Linux上确定进程位的最简单的方法

我正在寻找一种简单可靠的方式来确定使用标准shell命令正在运行的进程的位数。 虽然我已经看到了Solaris和Linux的解决scheme,但是我想find一个解决scheme,可以实现更高的简单性,可靠性和可移植性。 在Linux中,这可以使用/proc/$PID/exe , /proc/$PID/maps , /proc/$PID/auxv来完成,但是这些方法或者不在Solaris上,或者不能从sh调用。 在Solaris中,这样做的一个方法是使用pflags $PID但是在大多数库存Linux发行pflags中不安装pflags 。

通过Thread.list.size得到的线程号与通过/ proc的线程号不一样

首先看代码: #!/usr/bin/env ruby # encoding: UTF-8 thread_num = Thread.list.size thread_num_via_proc = thread_num_later = nil IO.readlines("/proc/#{Process.pid}/status").each do |line| if line.start_with?("Threads:") thread_num_via_proc = line.split[1].to_i thread_num_later = Thread.list.size end end p thread_num # 1 p thread_num_via_proc # 2 p thread_num_later # 1 从/ proc / [pid] / status得到的线程号总是等于Thread.list.size + 1 。 然后我提到man proc ,它说(使我困惑): 线程数:包含此线程的进程中的线程数。 应该有一些我误解了,关于“Thread.list”或“/ proc / […]