Articles of Linux操作系统

如何杀死在c + +的过程,只知道它的名字的一部分

前段时间我需要编写c ++代码来杀死一些进程。 在我的主程序中,我使用系统(“…”)在input上运行带有不同文件名string的大型CAE系统软件包。 CAE软件创build了许多进程,包含进程名string文件名 )。 一些CAE进程worktime > max_time ,比我需要closures他们: //filename contains part of CAE-process name string s="/bin/kill -9 `ps aux | grep "+filename+" | awk {'print $2'}`"; system(s.c_str()); 输出是: Usage: kill pid … Send SIGTERM to every process listed. kill signal pid … Send a signal to every process listed. kill -s signal pid … […]

如何访问timeval结构的字段

我试图打印struct timevalvariables中的值,如下所示: int main() { struct timeval *cur; do_gettimeofday(cur); printf("Here is the time of day: %ld %ld", cur.tv_sec, cur.tv_usec); return 0; } 我不断收到这个错误: 请求成员“tv_sec”在某些不是结构或联盟。 请求成员“tv_usec”的东西不是一个结构或联盟。 我怎样才能解决这个问题?

与GDB远程debugging错误

我试图远程debuggingx86_64 suse linux上的32位应用程序,但得到这个“远程寄存器格式错误”的错误。 我启动gdbserver侦听端口12345(gdbserver localhost:12345 my_prog) 这是错误的: $ gdb GNU gdb 6.6 Copyright (C) 2006 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely […]

如何将环境设置导入到我的Perl程序中?

我有一个脚本,其内容只是在linux中导出一个variables。 export LD_LIBRARY_PATH=…. 我想在我的Perl脚本中运行这个脚本,这样任何运行我的Perl脚本的人都将设置它们的LD_LIBRARY_PATH 。 我可以在我的Perl脚本的开始执行此操作: #!/usr/bin/perl -w system(". /myfolder1/myfolder2/myScript.sh");

捕获直接redirect到/ dev / tty

我正在为一个将文本直接分发到/ dev / tty的程序的应用程序控制器工作。 这是一个生产应用程序控制器,必须能够捕捉到terminal的所有文本。 一般来说,这不是一个问题。 我们只是redirectstdout和stderr。 这个特定的应用程序直接调用echo并将结果redirect到/ dev / tty( echo "some text" > /dev/tty )。 通过我的应用程序控制器redirect没有抓住文本。 我确实有这个应用程序的来源,但是我不能修改它,也不能再维护它。 有关如何捕捉和/或丢弃输出的想法?

C调用约定并传递参数

在Linux(或OS X)中进行函数调用时,被调用者是否可以修改堆栈中参数的值? 我是在这样的假设下,因为调用者是清理它们的那个,所以在函数调用之后它们应该包含相同的值。 但是我发现使用-O2的GCC正在修改传递给堆栈的参数。 我还查找了包括System V i386调用约定的文档,但无法find明确的答案。 这是我正在debugging的一些示例代码。 pushl %eax # %eax = 0x28 call _print_any popl %eax # %eax is now 0x0a 我会假设GCC修改堆栈上的参数是好的,但我想知道它在哪里指定它可以这样做。

从ARM的源代码交叉编译Qt 4.7的问题

我试图从源代码交叉编译Qt 4.7.1,这里有一些关于我的设置的注释: 我的预期输出是为了运行Qt应用程序而需要存在的共享对象库。 我的目标平台是采用ARM Cortex-A8架构的TI AM335x处理器。 我的开发平台是x86 64位Ubuntu虚拟机 我对这个应该如何工作的理解是,我下载了我的目标平台(这是TI的Linaro工具链)的工具链,我下载了Qt 4.7.1的源代码,我设置了mkspec来使用我的工具链,运行configure ,那么只需要运行make / make install ,我应该能够find所有.so的地方,我告诉它安装到。 但是,我有很多问题让这个想法工作。 首先,我下载了TI SDK版本:ti-sdk-am335x-evm-06.00.00.00,其中arm工具位于: [root_install_dir]/linux-devkit/sysroots/i686-arago-linux/usr/bin 我更新了我的$PATH与该目录: mike @ mike-VirtualBox:〜$ echo $ PATH /home/mike/ti-sdk-am335x-evm-06.00.00.00/linux-devkit/sysroots/i686-arago-linux/usr/bin:/ usr / local / Trolltech /Qt-4.8.5/bin:/home/mike/bin:/usr/lib/lightdm/lightdm:/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin目录:/ bin中:在/ usr /游戏:/首页/麦克风/箱 然后我根据最接近的例子创build了自己的mkspec: cp […]

Linux中C ++应用程序的内存稳定性

我想validation我为Linux编写和编译的C ++应用程序的内存稳定性。 这是一个networking应用程序,以每秒10-20个连接的速度响应远程客户端连接。 从长远来看,内存是上升到50MB,尽pipe该应用程序正在打电话删除… 调查显示,Linux不会立即释放内存。 所以这是我的问题: 如何强制Linux释放我实际释放的内存? 至less我想这样做一次来validation内存的稳定性。 否则,有没有可靠的内存指示器可以报告内存我的应用程序实际上是持有?

为什么这个ptrace程序说系统调用返回-38?

除了我正在运行execl("/bin/ls", "ls", NULL);之外,它和这个一样execl("/bin/ls", "ls", NULL); 。 结果显然是错误的,因为每个系统调用返回-38 : [user@ test]# ./test_trace syscall 59 called with rdi(0), rsi(0), rdx(0) syscall 12 returned with -38 syscall 12 called with rdi(0), rsi(0), rdx(140737288485480) syscall 9 returned with -38 syscall 9 called with rdi(0), rsi(4096), rdx(3) syscall 9 returned with -38 syscall 9 called with rdi(0), rsi(4096), rdx(3) syscall […]

从接口名称查找IP地址

在Linux上,常见的接口名称看起来像eth0,eth1等。我知道如何使用gethostbyname或类似的函数来查找至less一个IP地址,但是我不知道用什么方法来指定我想要的IP地址。 我可以使用ifconfig和parsing输出,但为这个信息炮轰出现…不雅观。 有没有办法,例如枚举所有的接口及其IP地址(也可能是MAC地址)到一个集合? 或者至less有一些沿着gethostbyinterface("eth0") ?