CreateProcess+;在Linux中创建等效的挂起标志?
我想知道是否有办法启动暂停的进程 与windows中挂起的CreateProcess+CREATE_类似:CreateProcess+;在Linux中创建等效的挂起标志?,c,linux,debugging,process,C,Linux,Debugging,Process,我想知道是否有办法启动暂停的进程 与windows中挂起的CreateProcess+CREATE_类似: CreateProcessA( NULL, CmdLine, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, "C:\\Windows\\System32\\", &si,
CreateProcessA(
NULL,
CmdLine,
NULL,
NULL,
FALSE,
CREATE_SUSPENDED,
NULL,
"C:\\Windows\\System32\\",
&si,
&pi);
ptrace似乎只支持ptrace_ATTACH,无法启动进程并直接挂起它,有什么想法吗
编辑
我需要能够捕捉到这样的过程
int main()
{
exit(0);
}
因此,shell方法将不起作用,因为该过程退出得非常快。对于shell没有一对一的比较,但在旋转一个过程,然后暂停它,然后再次启动它方面,这里是类似的
###to start a process:
#!/bin/bash
function_some_proc() {
echo "hi"
# if this is too fast you can always use "sleep" to add some time
}
function_some_proc &
FOO_PID=$!
echo "--"
echo $FOO_PID
echo "--"
###then to suspend
kill -STOP <PID>
#to resume
kill -CONT <PID>
###要启动流程:
#!/bin/bash
函数\u some\u proc(){
回音“嗨”
#如果这太快了,你可以用“睡眠”来增加一些时间
}
函数\u一些\u程序&
FOO_PID=$!
“回音”
echo$FOO_PID
“回音”
###然后暂停
停止
#恢复
杀死控制
一种可能的方法是将流程细节作为流程、fork和child中的输入,在执行流程之前,向self发送停止信号
示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
main()
{
int pid;
//Note: Replace argv_list with corresponding binary and arguments
//Can also get these values as command line argument from main(argc, argv)
char *argv_list[] = {"/usr/bin/ls","-lrt", "/", NULL};
if((pid=fork())==0)
{
printf("Child Executing\n");
//Send STOP signal to self to suspend
kill(getpid(), SIGSTOP);
//Sleep for stop signal handler to suspend current process
sleep(1);
//This line should start to execute only after CONT signal is sent.
execv(argv_list[0],argv_list);
}
else
{
printf("Child PID:%d, Parent continuing\n", pid);
}
printf("\n***Main - Exiting\n");
exit(0);
}
#包括
#包括
#包括
#包括
main()
{
int-pid;
//注意:用相应的二进制和参数替换argv_列表
//还可以从main(argc、argv)获取这些值作为命令行参数
char*argv_list[]={/usr/bin/ls“,“-lrt”,“/”,NULL};
如果((pid=fork())==0)
{
printf(“子执行\n”);
//向self发送停止信号以暂停
kill(getpid(),SIGSTOP);
//停止信号处理程序暂停当前进程的休眠
睡眠(1);
//只有在发送CONT信号后,该行才会开始执行。
execv(argv_列表[0],argv_列表);
}
其他的
{
printf(“子PID:%d,父继续\n”,PID);
}
printf(“\n***主-退出\n”);
出口(0);
}
这篇文章为这个问题提供了一个很好的答案。请注意,本文存在一些问题。这篇文章的作者斯科特·奈特(ScottKnight)显然没有费心确认他的代码示例是否会编译。父函数引用了一个神秘的pid变量
在我的项目中可以找到一个完整的工作示例。我的StartSpended项目在Microsoft Windows和GNU/Linux上编译。有关GNU/Linux实现,请参阅
我在GNU/Linux实现中使用了以下函数
PTRACE\u O\u TRACEEXEC
选项似乎符合要求。您说“只有在发送CONT信号后才应开始执行此行”,但没有提供详细信息。CONT信号是如何发送的?谁寄的?我正在尝试移植一个应用程序,该应用程序使用CreateProcessW启动另一个挂起的进程,显示一个消息框,然后在按下OK按钮时继续新进程。这是否可以用于复制该功能?