Articles of 进程

ImageMagick多次转换相同的图像?

在使用ImageMagick调整一些照片的大小时,我发现服务器速度变慢。 做一个htop显示有几个类似的convert命令(7)在同一个图像上同时执行。 这是正常的ImageMagick,或者我的代码以某种方式执行Imagemagick的convert时间在同一图像? 我正在使用ImageMagick ImageMagick 6.7.9-6 2012-09-18 。 转换 – 版本 Version: ImageMagick 6.7.9-6 2012-09-18 Q16 http://www.imagemagick.org Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC Features: OpenMP 附加信息 CentOS 6.3 i686系统有16个内核。 典型的input图像文件大约是10-100KB。 重复(不仅仅是类似的)命令的数量范围从2-16。 logging 日志显示没有重复的调用来convert两次调整相同的图像。

如何在Linux实时进程之间进行通信?

有很多例子说明如何通过FSMLabs编写RT-Linux的实时代码,但是这个发行版在很多年前就被抛弃了。 目前正在积极开发用于香草核的PREEMPT_RT补丁,但在官方维基上只有很less的代码示例。 首先让我介绍一下我的问题。 我正在写一个包含2个程序的项目: 字节码的虚拟机 – 它必须作为实时应用程序工作 – 它具有64KB的I / O存储器和64KB的字节码。 客户端程序 – 它将读写I / O内存,启动/暂停机器,加载新程序,设置参数等。它不一定是实时的。 如何在这些stream程之间进行通信,以保持stream程(1)的实时性并避免页面错误或其他可能干扰实时应用程序的行为? 方法1.只使用线程 有2个线程: 具有最高优先级的虚拟机线程 具有与用户和机器通信的正常优先级的客户端线程两个线程都可以通过名称访问所有全局variables。 我可以在每个机器周期后为传入/传出数据创build额外的缓冲区。 但是,如果客户端线程导致应用程序崩溃,则机器线程也将终止。 实现远程访问也比较困难。 方法2.共享内存 在旧的FSMLabs中,build议在进程之间使用共享的全局内存。 现代PREEMPT_RT的Wiki页面build议使用mmap()进行数据共享,但在同一篇文章中,由于页面错误,它不鼓励mmap()。 方法3.命名pipe道 这是更为灵活的进程间通信方式。 不过,我是Linux新手。 我们希望在机器和客户端之间共享内存,但也应该提供加载新程序(文件path或程序代码),停止/启动机器等的方法。旧的FSMLabs RT-Linux实现了自己的FIFO队列(命名pipe道)。 现代PREEMPT_RT不。 可以使用名称pipe道打破实时行为? 如何正确地做到这一点? 我应该使用O_NONBLOCK标志读取数据还是创build另一个线程来读/写pipe道中的数据? 你是否知道在一个进程必须是实时的进程之间进行通信的其他方式? 也许我只需要线程。 但是,考虑更多客户端连接到虚拟机进程的情况。

为什么sigaction说键盘快捷键发出的信号来自PID 0?

我正在做有关信号处理的圆顶调查。 在这种情况下,我对Linux上的SIGTSTP(SLES 11上的3.0.101)感兴趣。 写一个小程序捕获SIGTSTP并打印它的父PID和发送信号的进程的PID。 这就是我所看到的: 如果我使用kill -TSTP,那么发送进程PID是我按预期运行kill命令的shell的PID。 如果我在shell中键入ctrl + z,发送进程的PID是0,但我期望我按下ctrl + z的shell的PID(并运行捕获程序) 任何人都知道这是为什么发生? 不应该是某些特殊内核进程的PID吗? Sigaction的文档告诉我们kill发送的信号会填充si_pid字段,但是它没有提到shell快捷方式。 也许si_pid = 0意味着“未指定的发件人”。 这是我的捕手程序 #include<stdio.h> #include<stdlib.h> #include<signal.h> #include<unistd.h> #include<string.h> void tstp_handler(int num, siginfo_t* info, void* context) { pid_t ppid = getppid(); printf("\nReceived TSTP. pid %d ppid %d\n", info->si_pid, ppid); } int main(void) { struct sigaction action; memset(&action, 0, sizeof(struct sigaction)); […]

双叉和stdin

我编写了这个代码来在守护进程中运行我的进程。 我们的目标是即使closures它的父项,也能使这个过程运行。 现在,我想能够写在标准的东西。 我该怎么办 ? 这是代码。 def daemonize(cmd, options = {}) rd, wr = IO.pipe p1 = Process.fork { Process.setsid p2 = Process.fork { $0 = cmd #Name of the command pidfile = File.new(options[:pid_file], 'w') pidfile.chmod( 0644 ) pidfile.puts "#{Process.pid}" pidfile.close Dir.chdir(ENV["PWD"] = options[:working_dir].to_s) if options[:working_dir] File.umask 0000 STDIN.reopen '/dev/null' STDOUT.reopen '/dev/null', 'a' STDERR.reopen STDOUT […]

如何在linux中更改每个用户的最大进程数默认值

我遇到了一个问题,在Linux中更改用户的默认进程数。 我试图编辑/etc/security/limits.conf文件,添加以下行。 malintha hard nproc 10000 我保存后,我试着在terminal上的以下命令 ulimit -u 并给出以前的值(1024),但不是更新的值。 我怎样才能永久解决这个问题? 这是我的limits.conf文件

如何为* nix进程实现一个编写者喜欢的读/写锁

有一个名为flock()的Unix函数,进程可以使用它来获取对资源的共享(“读”)访问或独占(“写”)访问。 问题是,它饿死那些请求独占访问的进程。 这样的请求保持排队,直到没有进程持有共享锁; 同时,新的共享锁请求被授予“超前”等待独占锁的进程。 显然,请求共享锁的进程越多,作者将不得不等待那个没有未完成共享锁的偶然时间窗口越长。 我寻求的行为是这样的:一旦作者要求排他锁,那么后来的请求共享锁的读者将排在作者后面。 我被告知,这种types的锁的名称是“更喜欢读写的锁”。 有几个post(特别是这一个 )解决这个问题,但在线程级别。 我需要的是一个以这种方式协调进程的面向Unix / Linux的解决scheme。 更新 :我需要的解决scheme,通过自动删除锁来处理参与的过程可能会崩溃,而它持有一个锁的可能性。

Ejabberd限制在线用户数为64464。 描述符已经增加了

我被限制在一个Ejabberd节点上使大约64000(64,464个精确)的用户在线。 我正在使用XML脚本(Tsung)使用户在节点上联机。 我已经提出了描述符的限制: Eshell V5.10.4 (abort with ^G) 1> os:cmd("ulimit -n"). "1045000\n" 一个奇怪的观察是这样的(期望可用的端口数在这里是整数值): 2> os:getenv("ERL_MAX_PORTS"). false 此外,ejabberdctl.cfg文件中的“ERL_MAX_PORTS”设置为704500。 ERL_MAX_PORTS=704500 我猜一个Ejabberd节点有最大的用户上网的限制。 这可能是内存依赖于机器或东西。 另外,这是/etc/security/limits.conf的外观: #* soft core 0 #* hard rss 10000 #@student hard nproc 20 #@faculty soft nproc 20 #@faculty hard nproc 50 #ftp hard nproc 0 #@student – maxlogins 4 root soft nofile 1045000 root hard […]

无法看到一些进程名称

我在Python中创build一个简单的程序应该保存我当前的进程(使用Linux和pycharm)。 我的class级代码: class pidSaver: __pidDictionary={} def __init__(self): pids = [pid for pid in os.listdir('/proc') if pid.isdigit()] for pid in pids: try: os.kill(int(pid), 0) except OSError as e: if e.errno != errno.EPERM: #no premission error continue try: self.__pidDictionary[pid]=open(os.path.join('/proc', pid, 'cmdline'), 'rb').read() except IOError: # proc has already terminated continue def getDic(self): return self.__pidDictionary 和我的主要代码: pidsTry = […]

如何限制python中的subprocessstdout和stderr的大小

我需要运行用户提交的应用程序。 我的代码如下所示: def run_app(app_path): inp = open("app.in", "r") otp = open("app.out", "w") return subprocess.call(app_path, stdout=otp, stdin=inp) 现在,由于我无法控制用户将要提交的内容,我想限制应用程序输出的大小。 其他的事情,如尝试访问未经授权的系统资源和滥用CPU周期,正在受到执法规则的限制。 允许运行的最大时间由父进程处理(在python中)。 现在,stream氓应用程序仍然可以尝试通过向stdout写入大量数据来泛滥服务器系统,因为知道stdout正被保存到文件中。 我不想在内核模式下使用AppArmors RLIMIT或stdout / stderr文件。 能够使用标准库从python执行它将是非常好的。 我目前正在考虑创build文件的子类,并在每次写入时检查已经写入了多less数据。 或者创build一个最大长度的内存映射文件。 但我觉得可能有一个更简单的方法来限制文件大小,我还没有看到它。

在Linux内核4.8.0-53-通用Linux Mint 64位中,从IOCTL函数的不兼容指针初始化错误

使用Ioctl命令编写char设备模块时出现错误。 static struct file_operations my_fops = { .unlocked_ioctl = my_ioctl, error is here. I can not fix this. }; 注意:请忽略我所有的print_k 。 请帮我解决这个问题。 我感谢你们所有人。 这是我的代码: static long my_ioctl(struct file *f,unsigned int cm,unsigned long arg[b]) { int re; unsigned long arg[3]; switch (cm) { case H_ADD: arg[2] = arg[0] + arg[1]; print_k("Driver:Calculating is complete,Result = %d \n",arg[2]); […]