标签: process

使用popen2创建的杀戮过程

我正在使用函数popen2(已在stackoverflow上的其他地方推荐)以编程方式创建一个必须在一段时间后再次被杀死的进程.popen2返回一个PID,我认为这个PID可以用来杀死进程.但是,它不会以这种方式工作.为了杀死它,我必须递增返回的PID,我不明白(见下面的代码)

当各种线程并行执行此操作时,可能会出现另一个问题.在这种情况下,我认为由于竞争条件,PID可能会有不同的差异.

所以我的问题是:如何在多线程场景中可靠地识别popen2创建的进程的PID?

#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <signal.h>

#define READ 0
#define WRITE 1

pid_t popen2(const char *command, int *infp, int *outfp) {

    int p_stdin[2], p_stdout[2];
    pid_t pid;

    if (pipe(p_stdin) != 0 || pipe(p_stdout) != 0)
        return -1;

    pid = fork();

    if (pid < 0)
        return pid;
    else if (pid == 0)
    {
        close(p_stdin[WRITE]);
        dup2(p_stdin[READ], READ);
        close(p_stdout[READ]);
        dup2(p_stdout[WRITE], WRITE);

        execl("/bin/sh", "sh", "-c", command, NULL);
        perror("execl");
        exit(1);
    }

    if (infp == NULL)
        close(p_stdin[WRITE]);
    else
        *infp = p_stdin[WRITE];

    if …
Run Code Online (Sandbox Code Playgroud)

c process exec popen

0
推荐指数
1
解决办法
2995
查看次数

是否有Erlang函数来获取Erlang系统(erl.exe或werl.exe)OS PID?

我想从我的Erlang代码中获取Erlang系统(werl.exe)的(Windows 7)OS PID.有谁知道这样做的方法?

erlang operating-system process

0
推荐指数
1
解决办法
161
查看次数

一个进程可以有两个接收块

我的工作环境是Erlang.具有2个不同功能的进程是否可以在不同功能中具有两个接收块.

receive
....
end.

request()
PID!(message)
%% Can i get the reply back here instead of the receive block above?
Run Code Online (Sandbox Code Playgroud)

erlang process

0
推荐指数
1
解决办法
1168
查看次数

如何在程序死后重新启动它

我正在写一些像这样的监控程序:

 tail -f /var/log/router-home.log | while read line ; do
   echo "$line" | egrep "MTF_SIP" | cut -b 28- | sed -u 's/#012/\n/g' \
   | egrep "IPP-->Received Event|rvCCConnMdmNewDigitCB|rvCCCallHandleOutOfBandDTMF" \
   | cut -d " " -f 15
 done > /tmp/phone/status &
Run Code Online (Sandbox Code Playgroud)

但是每次logrotation出现时它都会改变/var/log/router-home.log对这个例程的多个进程的杀戮,我无法通过执行一个来检查它的状态ps -e|grep tail

如何监控此例程并在死亡时重新启动它?

bash process

0
推荐指数
1
解决办法
148
查看次数

如何在C++中运行另一个应用程序并与之通信,跨平台

我想从我的C++代码中运行另一个程序.system()返回int,因为每个程序只能返回int到os.但是,我想调用的另一个程序将在我的基本应用程序中生成一个我需要的字符串.如何将其发送到父进程?

这两个应用程序将在同一个文件夹中,所以我认为子应用程序可以将字符串保存到"temp.txt",然后主应用程序可以读取并删除它(这不是性能关键的过程,我将调用另一个进程只是在我的主opengl应用程序中调用打开文件对话框).然而,这是一个有点难看的解决方案,是否有更好的跨平台解决方案?

谢谢

c++ linux windows cross-platform process

0
推荐指数
1
解决办法
583
查看次数

c#run命令不执行命令

我想运行这个:

string command = "echo test > test.txt";
System.Diagnostics.Process.Start("cmd.exe", command);
Run Code Online (Sandbox Code Playgroud)

它不起作用,我做错了什么?

c# command-line process

0
推荐指数
1
解决办法
5749
查看次数

进程挂在java中,即使我已经读取(输入/错误)流,waitFor()也会永远占用

我在使用Java运行多个进程时遇到问题.

我有一个从向量运行进程的循环cmds,它当前运行第一个进程,然后第二个进程挂起.

   ProcessBuilder proc = null;
   for (String cmd:cmds){
       proc = new ProcessBuilder(cmd.split("\\s"));
       Process p = proc.start();

       //Handle streams

       //in
       Scanner stdin = new Scanner(p.getInputStream());
       while(stdin.hasNextLine()){
            System.out.println(stdin.nextLine());
       }
       //err
       Scanner stderr = new Scanner(p.getErrorStream());
       while(stderr.hasNextLine()){
             System.out.println(stderr.nextLine());
       }
       //wait
       p.waitFor();
   }
Run Code Online (Sandbox Code Playgroud)

这个答案对我来说显然不起作用,因为我从每个进程的InputStream和ErrorStream中读取过.我有什么误会?

我怎样才能解决这个问题?

注意:我删除了我拥有的try块,因为它在这个示例代码中没有用处

编辑

 proc = new ProcessBuilder(cur_string.split("\\s"));
 proc. redirectErrorStream(true);
 final Process p = proc.start();//Runtime.getRuntime().exec(cur_string);
 //Handle streams
 //in
 new Thread(new Runnable(){
           public void run(){
                Scanner stdin = new Scanner(p.getInputStream());
                while(stdin.hasNextLine()){
                            System.out.println(stdin.nextLine());
                }
                stdin.close();
                }
        }).start();

  //wait
  p.waitFor();
Run Code Online (Sandbox Code Playgroud)

java process stream

0
推荐指数
1
解决办法
2390
查看次数

Process.ExitCode属性返回的退出代码不正确

我有一个本机C++应用程序,我在执行C++/CLI应用程序时作为一个进程运行,我看到退出代码有一些奇怪的行为.我希望当进程正确退出时退出代码为0但Process.ExitCode返回-529697949.但是,当我调试C++应用程序时,我可以看到返回的退出代码实际为0.为什么Process.ExitCode属性与此值不匹配?

.net c++ process

0
推荐指数
1
解决办法
736
查看次数

从Java代码调用C可执行文件后没有得到任何输出

我正在尝试从已经编译和执行的Java代码执行C代码,但是,我没有从可执行文件中获得任何输出.任何人都可以帮我完成这项任务吗?

代码如下.

public class Test {
    public static void main(String args[]) {
        try {
            Process processCompile = Runtime.getRuntime().exec("e:/Sample.exe");
        } catch(Exception ex) {
            ex.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c java process runtime.exec

0
推荐指数
1
解决办法
376
查看次数

从Windows 8 TaskManager隐藏进程

我想隐藏Windows 8 TaskManager中的进程.

前一段时间我发现了一个名为"TMListViewDelete"的类,它在互联网上有点着名(和地下),一个人在课堂上做了必要的修改以使用Windows Vista/7 TaskManager,而且几天前我做了所有进行必要的修改以将Class转换为具有一些选项的几个通用函数.

...但是甚至修改了代码的很多部分我不理解100%的代码,我知道它从Taskmanager进程读取类名然后删除一个项目(一行),我可以注意到这不是最好的从taskmanager隐藏进程的方法,但这就是我所拥有的.

我需要的是实现/扩展功能,以使用Windows 8 x86/x64 TaskManager,但就像我说的,即使我找到win8任务管理器的类名,我不知道如何添加功能或在哪里写在代码中.

这是班级:

#Region " Hide Process From TaskManager "

' [ Hide Process From TaskManager ]
'
' // By Elektro H@cker
'
' Examples :
'
' Hide_Process_From_TaskManager.Processes_Names = {Process.GetCurrentProcess.ProcessName, "cmd", "notepad.exe"} ' Processes to hide.
' Hide_Process_From_TaskManager.Task_Manager_Window_Titles = {"Administrador de tareas de Windows", "Windows Task Manager"} ' Support for unknown TaskManager Window Titles.
' Hide_Process_From_TaskManager.Hide_Interval = 3 ' Hidding Interval.
' Hide_Process_From_TaskManager.Running = True ' Start hidding processes. …
Run Code Online (Sandbox Code Playgroud)

.net vb.net process taskmanager windows-8

0
推荐指数
1
解决办法
6659
查看次数