标签: exec

bash:强制exec'd进程有无缓冲的stdout

我有一个像这样的脚本:

#!/bin/bash
exec /usr/bin/some_binary > /tmp/my.log 2>&1
Run Code Online (Sandbox Code Playgroud)

问题是它将some_binary所有日志记录发送到stdout,并且缓冲使得它只能看到几行的块输出.当一些事情陷入困境时,这很烦人,我需要看看最后一行说的是什么.

有没有办法让stdout在我执行会影响some_binary的exec之前没有缓冲,所以它有更多有用的日志记录?

(包装器脚本只在exec之前设置一些环境变量,因此perl或python中的解决方案也是可行的.)

bash logging exec unbuffered-output

20
推荐指数
3
解决办法
2万
查看次数

检查"exec"是否被禁用

我可以使用PHP中的任何函数来检测exec函数是否可用吗?

php exec

20
推荐指数
2
解决办法
2万
查看次数

执行另一个二进制文件时如何实现bash EXIT陷阱?

我想使用bash EXIT陷阱使用exec以避免产生新进程.这可能吗?

那是,

#!/bin/bash
touch $0.$$
trap "rm -v $0.$$" EXIT
/bin/echo Hello
Run Code Online (Sandbox Code Playgroud)

$0.$$使用bash的EXIT陷阱删除临时文件

#!/bin/bash
touch $0.$$
trap "rm -v $0.$$" EXIT
exec /bin/echo Hello
Run Code Online (Sandbox Code Playgroud)

永远不会"触发"陷阱(完成后没有来自rm文件的消息$0.$$).

当然,它是有道理的,陷阱不会发射,因为bash不再受到控制exec.有没有办法让它工作使用exec?诚然,这不仅仅是出于好奇而不是实际问题.

bash exec bash-trap

20
推荐指数
1
解决办法
3727
查看次数

动态过滤pandas数据帧

我正在尝试使用三列的阈值来过滤pandas数据帧

import pandas as pd
df = pd.DataFrame({"A" : [6, 2, 10, -5, 3],
                   "B" : [2, 5, 3, 2, 6],
                   "C" : [-5, 2, 1, 8, 2]})
df = df.loc[(df.A > 0) & (df.B > 2) & (df.C > -1)].reset_index(drop = True)

df
    A  B  C
0   2  5  2
1  10  3  1
2   3  6  2
Run Code Online (Sandbox Code Playgroud)

但是,我想在一个函数中执行此操作,其中列的名称及其阈值在字典中提供给我.这是我的第一次尝试,运作正常.基本上我将过滤器放在cond变量中并运行它:

df = pd.DataFrame({"A" : [6, 2, 10, -5, 3],
                   "B" : [2, 5, 3, 2, 6],
                   "C" : …
Run Code Online (Sandbox Code Playgroud)

python exec filter dataframe pandas

20
推荐指数
2
解决办法
5867
查看次数

如何确保Ant的exec任务的所有输出都转到stdout?

Ant exec任务有一个输出属性,可用于告诉Ant输出的位置.我用它将输出重定向到文件.问题是,如果我不对输出做些什么,那么Ant打印的东西并没有那么大的帮助 - 它并不完整.

有没有设置输出属性System.out

ant exec

19
推荐指数
2
解决办法
2万
查看次数

如何使用正确的参数调用C中的execl()?

如果我输入一个shell,我有vlc(重现视频的程序):

/ home/vlc"/ home/my movies /我想看的电影.mkv"

它打开了一个再现电影.

但是,当我运行以下程序时:

#include <unistd.h>

int main(void) {

  execl("/home/vlc", "/home/my movies/the movie i want to see.mkv",NULL);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

vlc打开但不会重现任何内容.我怎么解决这个问题?

我试过的事情:

我猜的

execl("/home/vlc", "/home/my movies/the movie i want to see.mkv",NULL);
Run Code Online (Sandbox Code Playgroud)

相当于在shell中输入:

/home/vlc /home/my movies/the movie i want to see.mkv
Run Code Online (Sandbox Code Playgroud)

这不起作用,所以我试过

 execl("/home/vlc", "\"/home/my movies/the movie i want to see.mkv\"",NULL);
Run Code Online (Sandbox Code Playgroud)

和vlc打开但不会重现.

我没有在最后写NULL,而是尝试了0,(char*)0,1 ....没有用.救命!!!!

c quotes external exec unistd.h

19
推荐指数
1
解决办法
11万
查看次数

我在Linux中打开文件时应该何时使用O_CLOEXEC?

我的过程分叉了几次,每次孩子都会执行 - 意味着我希望它能运行其他程序.

在主进程中,我使用open()syscall 打开文件描述符.

给它一个标志是否正确,O_CLOEXEC以便我运行的新程序exec()不具有fd资源?

c linux file-io exec

19
推荐指数
1
解决办法
1万
查看次数

将值从PHP脚本传递到Python脚本

我查看了与此类似的其他问题,但仍无法解决这个问题.

我有一个基本的PHP文件,它执行此操作:


?php
$item='example';
$tmp = exec("python testscriptphp.py .$item");
echo $tmp;
?
Run Code Online (Sandbox Code Playgroud)

虽然成功调用了我在webhostserver上运行的python.现在在我的python脚本中我想要这样的东西:


item=$item
print item
Run Code Online (Sandbox Code Playgroud)

基本上我问如何将变量从PHP传递到python脚本,然后在必要时返回php.

谢谢!

php python variables exec

18
推荐指数
1
解决办法
3万
查看次数

Runtime.exec()bug:挂起而不提供Process对象

我是否用这个:

process = Runtime.getRuntime().exec("logcat -d time");
Run Code Online (Sandbox Code Playgroud)

或者那个:

process = new ProcessBuilder()
              .command("logcat", "-d", "time")
              .redirectErrorStream(true)
              .start();
Run Code Online (Sandbox Code Playgroud)

我得到了相同的结果:它经常挂在exec()或start()调用中,无论我试图做什么!运行它的线程甚至不能被Thread.interrupt()中断!子进程肯定已启动,如果被杀死,则返回上述命令.

这些调用可能在第一次尝试时失败,所以没有办法阅读他们的输出!我也可以用一个简单的"su -c kill xxx"命令行,结果相同!

编辑:开始使用一些调试日志调试NDK项目中的java_lang_ProcessManager.cpp文件!所以这是我到目前为止找到的,在fork()之后父进程执行此操作:

int result;
int count = read(statusIn, &result, sizeof(int));            <- hangs there
close(statusIn);
Run Code Online (Sandbox Code Playgroud)

虽然子进程不应该阻止它:这就是孩子所做的事情(如果开始的话!):

    // Make statusOut automatically close if execvp() succeeds.
    fcntl(statusOut, F_SETFD, FD_CLOEXEC);                      <- make the parent will not block

    // Close remaining unwanted open fds.
    closeNonStandardFds(statusOut, androidSystemPropertiesFd);  <- hangs here sometimes

    ...

    execvp(commands[0], commands);

    // If we got here, execvp() failed or the working …
Run Code Online (Sandbox Code Playgroud)

android process exec

18
推荐指数
2
解决办法
4330
查看次数

php后台进程使用exec函数

我已经搜索了很多,以找到确切的答案,但没有找到任何答案.

很多人提到,我们应该& AT命令的结束并不等待回应.
例如,在后台运行bg.php,建议:

exec("/usr/bin/php bg.php &");  
Run Code Online (Sandbox Code Playgroud)

但它对我不起作用.并且主脚本等待bg.php的完全执行.

我也读过某处在日志文件中写入bg.php输出,但我的后台脚本不会产生任何输出.它做了一些过程然后在数据库中写了一些东西.

我只是希望我的脚本运行bg.php而不要等它结束.

请帮我包括正确的代码.

php exec background-process

18
推荐指数
1
解决办法
2万
查看次数