Tag: linux

Python产生一个子subprocess,分离并退出

我想知道这是否是正确的方式来执行系统进程并从父母分离,但允许父母退出而不创build僵尸和/或杀死subprocess。 我目前正在使用的subprocess模块,这样做… os.setsid() os.umask(0) p = subprocess.Popen(['nc', '-l', '8888'], cwd=self.home, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) os.setsid()更改进程组,我相信这是进程在父进程退出时继续运行的原因,因为它不再属于同一个进程组。 这是正确的,这也是一个可靠的方式来执行此? 基本上,我有一个远程控制实用程序通过套接字进行通信,并允许远程启动进程,但是我必须确保,如果远程控制器死亡,它启动的进程继续运行不受影响。 我正在阅读有关双叉,不知道这是否是必要的和/或subprocess.POpen close_fds以某种方式照顾,所需的一切是改变进程组? 谢谢。 伊利亚

Linux clock_gettime(CLOCK_MONOTONIC)奇怪的非单调行为

在我的应用程序中,我正在使用clock_gettime(CLOCK_MONOTONIC)来测量帧之间的时间差clock_gettime(CLOCK_MONOTONIC)中的一个典型方法),并且时不时地遇到clock_gettime(..)的奇怪行为 – 返回的值偶尔不是单调的(即前一次比现在大 )。 目前,如果发生这样的矛盾,我只需跳过当前帧并开始处理下一个帧。 问题是,这怎么可能呢? 是clock_gettime Linux POSIX实现中的一个错误? 我正在使用Ubuntu Server版本10.04(内核2.6.32-24,x86_64),gcc-4.4.3。

如何从用户空间访问系统调用?

我读了LKD 1中的一些段落,我不能理解下面的内容: 从用户空间访问系统调用 通常,C库提供对系统调用的支持。 用户应用程序可以从标准头文件中获取函数原型,并与C库链接以使用系统调用(或者库函数,然后使用您的系统调用调用)。 但是,如果你只是写系统调用,glibc已经支持它了,这是值得怀疑的! 值得庆幸的是,Linux提供了一组包含访问系统调用的macros。 它设置寄存器内容并发出陷阱指令。 这些macros被命名为_syscall n () ,其中n在0和6之间。 该数字对应于传入系统调用的参数的数量,因为macros需要知道预期有多less个参数,并因此推入寄存器。 例如,考虑系统调用open() ,定义为 long open(const char *filename, int flags, int mode) 系统调用macros使用这个系统调用没有明确的库支持将是 #define __NR_open 5 _syscall3(long, open, const char *, filename, int, flags, int, mode) 然后,应用程序可以简单地调用open() 。 对于每个macros,有2 + 2×n个参数。 第一个参数对应于系统调用的返回types。 第二个是系统调用的名称。 接下来是按照系统调用的顺序跟随每个参数的types和名称。 __NR_open定义在<asm/unistd.h> ; 这是系统呼叫号码。 _syscall3macros通过内联汇编扩展为C函数; 程序集将执行上一节中讨论的步骤,将系统调用号和参数推入正确的寄存器,并发出软件中断以捕获到内核中。 将这个macros放在应用程序中是使用open()系统调用所需要的。 让我们编写macros来使用我们精彩的新foo()系统调用,然后编写一些testing代码来展示我们的努力。 #define __NR_foo 283 […]

Shebang符号:Windows和Linux上的Python脚本?

我有一些用Python编写的小实用脚本,我想在Windows和Linux上都可以使用。 我想避免显式调用Python解释器。 有没有一种简单的方法来将shebang符号指向Windows和Linux上的正确位置? 如果没有,是否有另一种方法来允许在Windows和Linux上隐式调用Python解释器,而无需在操作系统间进行转换时修改脚本? 编辑:Windows上的shebang支持是Cygwin提供的,但我想在Windows上使用本机Windows Python解释器,而不是Cygwin。 编辑#2:看来,shebang符号覆盖Cygwinterminal中的文件关联。 我想我可以将Cygwin Python和symlink / usr / bin / python卸载到Windows本机Python。

我如何使用sed来更改我的configuration文件,灵活的键和值?

我想search这个expression式的configuration文件:“central.database”。 然后我想将与“central.database”关联的设置更改为“SQLTEST”。 最初configuration文件的布局看起来像这样: central.database = SQLFIRSTTEST 这是我希望看起来像sed更换后: central.database = SQLTEST 我正在做一个bash脚本,欢迎任何build议,build议或替代解决scheme! (实际上central.database和SQLTEST都来自bashvariables) 我目前的代码(第三次尝试): sshRetValue=$(ssh -p "35903" -i $HOME/sshids/idrsa-1.old ${1} <<EOF sed -i "s/^\($CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt; echo $? EOF ) 错误信息: Pseudo-terminal will not be allocated because stdin is not a terminal. sed: -e expression #1, char 58: unknown option to `s' -bash: line 3: EOF: command […]

在Linux C ++应用程序中寻找和读取大文件

我正在使用G ++中的标准ftell和fseek选项运行到整数溢出,但我想我错了,因为似乎ftell64和fseek64不可用。 我一直在寻找和许多网站似乎引用使用lseek与off64_t数据types,但我还没有find任何引用的东西等于fseek的例子。 目前我正在阅读的文件是16GB + CSV文件,预计至less会翻一番。 没有任何外部库,与fseek / ftell对实现类似结构最直接的方法是什么? 我现在的应用程序正在使用4.x的标准GCC / G ++库。

在脚本执行后避免gnome-terminalclosures?

我创build了一个bash脚本,可以打开几个gnometerminal,通过ssh连接到教室电脑并运行脚本。 脚本完成后,如何避免gnome-terminalclosures? 请注意,我也希望能够在terminal中input更多的命令。 这是我的代码的一个例子: gnome-terminal -e "ssh root@<ip> cd /tmp && ls"

有没有办法在Linux中redirect时间输出到文件

关于Linux上的计时程序只是一个小问题:time命令允许测量程序的执行时间: [ed@lbox200 ~]$ time sleep 1 real 0m1.004s user 0m0.000s sys 0m0.004s 哪个工作正常。 但是,如果我尝试将输出redirect到一个文件,它会失败。 [ed@lbox200 ~]$ time sleep 1 > time.txt real 0m1.004s user 0m0.001s sys 0m0.004s [ed@lbox200 ~]$ cat time.txt [ed@lbox200 ~]$ 我知道有其他的实现时间与选项-o写一个文件,但我的问题是关于没有这些选项的命令。 有什么build议么 ?

Linux:复制并创build目标目录,如果它不存在

我想要一个命令(或者可能是cp的一个选项)创build目标目录,如果它不存在。 例: cp -? file /path/to/copy/file/to/is/very/deep/there

如何configurationQt从Linux到Windows目标的交叉编译?

我想交叉编译Qt库(最终是我的应用程序)使用Linux x86_64主机的Windows x86_64目标。 我觉得我很接近,但是我可能对这个过程的某些部分有一个根本性的误解。 我开始在我的Fedora机器上安装所有的mingw包,然后修改win32-g++ qmake.conf文件以适合我的环境。 不过,我似乎被Qt: -platform和-xplatform一些看似明显的configuration选项卡住了。 Qt的文档说,平台应该是主机架构(你正在编译的地方),- -xplatform平台应该是你希望部署的目标平台。 在我的例子中,我设置了-platform linux-g++-64和-xplatform linux-win32-g++ ,其中linux-win32-g ++是我修改的win32-g ++configuration。 我的问题是,执行configuration这些选项后,我看到它调用我的系统的编译器,而不是交叉编译器(x86_64-w64-mingw32-gcc)。 如果我省略-xplatform选项并将-platform设置为我的目标规范(linux-win32-g ++),那么它会调用交叉编译器,但是如果发现某些与Unix相关的函数没有定义,则会发生错误。 以下是我最近一次尝试的一些输出: http : //pastebin.com/QCpKSNev 。 问题: 当从Linux主机交叉编译类似Qt for Windows的应用程序时, 是否应该调用本地编译器? 也就是说,在交叉编译过程中,我们不应该只使用交叉编译器吗? 当我指定-xplatform选项时,我不明白为什么Qt的configuration脚本会尝试调用我的系统的本机编译器。 如果我正在使用mingw交叉编译器,那么我何时需要处理规格文件? 海湾合作委员会的规格文件仍然是我的一个谜,所以我想知道如果这里的一些背景将帮助我。 一般来说,除了在我的qmake.conf中指定一个交叉编译器之外,我还需要考虑什么呢?