Articles of 进程

在不相关的进程之间共享futex

不相关的stream程如何使用futex进行合作? 比方说,我有不相关的进程,一个是我的模块,另一个是例如后台脚本。 我想build立一个条件variables与两个互斥之间使用futex,以获得用户空间快速代码path。 在我看来,存储互斥量的内存可能在mmap的d文件中,如果这个内存被映射的话,例如mlock这两个进程在理论上可以针对相同地址发出futex调用。 或者,也许可以使用FUTEX_FD将futex从一个进程传递到另一个FUTEX_FD 。 代码提交低级,高级和dynamic语言被接受(C,C ++,Python等)。 必须支持“健壮的futex”API。 参考文献: https://www.kernel.org/doc/Documentation/robust-futexes.txt http://locklessinc.com/articles/mutex_cv_futex/

Linux:我可以在不使用任何IPC(pipe道等)的情况下读取另一个进程的输出吗?

是否有可能在linux中以某种方式读取另一个进程的输出(来自stdout和stderr)而不知道它? 因此,让我们说我有一个进程在后台运行,并且进程B想要读取它的输出 – 有可能吗? 我不能使用pipe道或屏幕程序。 我尝试从/ proc / xxx / fd或从/ pts / x控制台读取等,但没有任何工作到目前为止。

内核存储进程哪里没有运行?

每个人,我有一些关于Linux任务的问题,我知道当前处于状态TASK_RUNNING所有任务都是名为runqueue数据结构,但是等待某个事件的任务又是什么状态(非TASK_RUNNING状态,例如一个正在等待来自键盘的input)。 我还有一些其他的数据结构用于这些list of tasks吗?还是只有一般list of tasks ? 预先感谢任何解释

Android NDK – 构buildTessTwo(安卓版Tesseract工具) – ndk-build失败

当我运行ndk-build,它没有抱怨从以下错误: $ ndk-build make: /…/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc: Command not found Compile arm : jpeg <= jcapimin.c make: /…/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc: Command not found make: *** [obj/local/armeabi/objs/jpeg/jcapimin.o] Error 127 问题是,虽然它说“找不到命令”,“arm-linux-androideabi-gcc”存在于上面的path。 即使我直接从/…/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/运行“arm-linux-androideabi-gcc”,它也会给出同样的错误“command not found” 我也添加./toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin到我的path,但仍然得到相同的错误。 即使我尝试了不同版本的ndk(7,7b,6b)仍然是相同的错误! 在我看来,上面的gcc是为32位机器而我的机器是“Linux 2.6.32-37-x86_64”。 但我猜ndk包应该适用于32位和64位。 我对吗? 在使用之前是否需要编译或编译ndk? 我假设下载和解包是我必须做的。 对? 怎么样sdk? 我只是下载并解压缩在我有我的ndk相同的文件夹。 我需要configuration他们相互工作吗?

可执行文件上的setuid似乎不起作用

我写了一个名为killSPR的小型C实用程序来杀死我的RHEL框中的以下进程。 这个想法是任何login到这个linux系统的人都可以使用这个工具来杀死下面提到的进程(这是行不通的 – 下面会解释)。 cadmn@rhel /tmp > ps -eaf | grep -v grep | grep " SPR " cadmn 5822 5821 99 17:19 ? 00:33:13 SPR 4 cadmn cadmn 10466 10465 99 17:25 ? 00:26:34 SPR 4 cadmn cadmn 13431 13430 99 17:32 ? 00:19:55 SPR 4 cadmn cadmn 17320 17319 99 17:39 ? 00:13:04 […]

我如何确保正在运行的进程正在运行?

背景 : 我有一个linux [1]系统pipe理一系列第三方守护进程,它们的交互仅限于shell [2] init脚本,即只有{start | restart | stop | status}可用。 问题 : 进程可以假设以前运行的进程的PID,通过检查正在运行的进程是否存在进程,检查进程的状态。 例如 : 过程一个PID 123的运行,随后死亡,进程B用PID 123初始化,状态命令用一个不正确的(错误的)“OK”响应。 换句话说,我们只检查是否存在一个PID过程来validation过程是否正在运行,我们假设如果存在一个具有这个PID的过程,那么这个过程是有问题的。 build议的解决scheme : 使用PID询问进程,确保命令/守护进程按照预期的那样运行。 这个解决scheme的问题是,命令和PID都需要匹配; 因此需要保持多位信息并保持同步,并且增加了错误/边缘条件的复杂性。 将PID文件的创build时间与进程的开始时间相关联,如果进程在PID文件创build时间的某个增量范围内,我们可以确定命令/守护进程运行如期。 除了使用该PID运行的进程以外,是否有标准方法来批准进程/ PID文件的真实性? 即我(作为系统)想知道你(stream程)是否正在运行,如果你是我认为你是谁(A而不是B)。 假设我们已经select实施上面提出的第二种解决scheme,PID创build时间和过程开始时间之间的置信区间/增量是合理的吗? 在这里,合理的手段可以接受types1 /types2错误之间的妥协。 [1] CentOS / RHEL [2] Bash

进程名称长度的最大允许限制是多less?

进程名称允许的最大长度是多less? 我正在从/proc/[pid]/stat文件读取进程名称,我想知道我需要的最大缓冲区。 我很确定有一个可configuration的限制,但只是无法find这是什么。

linux如何同时32位和64位? 或者是在glibc中处理的东西?

Linux如何同时32位和64位? 或者是在glibc中处理的东西? 我运行CentOS 5.3,它是一个“64位”版本; &#x867D;然我build立了64位和32位的东西。 据我所知,Windows应该有一个32位的仿真器。 Linux是否做同样的事情? 它在用户空间还是内核空间? 如果libc处理它,它有点像模拟器,说,我会链接到32位应用程序,但说64位的内核?

跟踪器提取和跟踪器存储过程消耗大量的RAM

我正在使用Arch Linux,内核3.16。 从最后一个星期我的两个进程跟踪器提取和跟踪器存储正在占用太多的RAM。 每2小时一次系统挂断。 需要300 MB的跟踪器提取和采用2 GB RAM的跟踪器存储。 (总RAM是3.8 GB) 我想知道这些追踪程序是什么,他们的工作是什么。 如果我杀了他们在系统性能这个效果吗? 有什么方法永久杀死他们,以便我可以摆脱这两个过程? 请帮帮我。

ffmpeg安装在CentOS 64位上,安装时带-fPIC错误

试图在64位CentOS机器上编译ffmpeg时出现这个错误。 这是我的./configure选项: ./configure –enable-shared –enable-gpl –enable-nonfree –enable-postproc –enable-swscale –enable-pthreads –enable-libx264 –enable-libxvid –enable-libvorbis –enable-libfaac –enable-libmp3lame –enable-libvpx make 编译源代码时出现以下错误: /usr/bin/ld: /usr/local/lib/libvpx.a(vpx_codec.co): relocation R_X86_64_32 against .rodata.str1.1' can not be used when making a shared object; recompile with -fPIC /usr/local/lib/libvpx.a: could not read symbols: Bad value collect2: ld returned 1 exit status make: *** [libavcodec/libavcodec.so.54] Error 1 我如何解决这个错误,并在我的64位CentOS盒子上使用最新的ffmpeg来运行libvpx?