iOSOpenDev 关闭指定程序(而非重启SpringBoard)


#21

您好,您说的是哪个方法呀,我并没有找到


#22

你看WeChat的pid变没有, 变了就是被SB重启了


#23

执行前
zyhyueyu1090-1:~ root# ps -e | grep WeChat
691 ?? 0:03.37 /var/mobile/Containers/Bundle/Application/32093D5D-DBB2-4489-8067-8B436C360169/WeChat.app/WeChat
747 ttys000 0:00.01 grep WeChat
执行打印
: pid=745,child pid = 748 ,result = 0

执行后
691 ?? 0:03.37 /var/mobile/Containers/Bundle/Application/32093D5D-DBB2-4489-8067-8B436C360169/WeChat.app/WeChat
750 ttys000 0:00.01 grep WeChat
(并且,如果执行前 在微信里打开一个聊天页面,执行后再打开微信 还是会在聊天页面,这也会是SB重启的吗?)


#24
int result = posix_spawn(&pid,"/bin/kill",&fact,&attr,args,environ);
char cmd[]="killall";
char opt[]="-9";
char opt2[]="WeChat";
char *args[4];
args[0]=cmd;
args[1]=opt;
args[2]=opt2;
args[3]=NULL;

kill怎么跟killall混一起用?

你先找个例子好好看看吧


#25

谢谢了 ,bin里面只有kill,没有killall,所以之前我就改成killall了,现在 换成kill,然后遍历所有进程找出想要的kill掉,然后被SB重启了,虽然也达到了效果,但是有没有更好的方法


#26

如果你想重启的话 posix_spawn 就可以直接实现,直接执行kill,SB 会自动重启这个应用,我是用微信试的,


#27
6s:~ root# which killall
/usr/bin/killall


#28

3Q,非常感谢!


#29

哈喽 还在吗? 您说SpringBoard里的哪个方法呀


#31

原来是这样用的 非常感谢您


#32
#include <spawn.h>

int killWeChat() {
    posix_spawnattr_t attr;
    posix_spawn_file_actions_t fact;
    pid_t pid;
    char cmd[] = "killall";
    char opt[] = "-9";
    char opt2[] = "WeChat";
    char *args[4];
    args[0] = cmd;
    args[1] = opt;
    args[2] = opt2;
    args[3] = NULL;
    posix_spawnattr_init(&attr);
    posix_spawn_file_actions_init(&fact);
    int result = posix_spawn(&pid, "/usr/bin/killall", &fact, &attr, args, NULL);
    NSLog(@"pid=%d,child pid = %d ,result = %d\n", getpid(), pid, result);

    int state = 0;
    waitpid(pid, &state, 0);
    NSLog(@"stat is %d\n", state);
    return 0;
}

整个方法可以这样写,希望对其他人能有帮助


#33

为什么都写这么复杂

#include <spawn.h>

int killWeChat() {
    pid_t pid;
    const char *args[] = 
    {
        "/usr/bin/killall",
        "-9",
        "WeChat",
        NULL
    };
    int result = posix_spawn(&pid, "/usr/bin/killall", NULL, NULL, args, NULL);
    NSLog(@"pid=%d,child pid = %d ,result = %d\n", getpid(), pid, result);

    int state = 0;
    waitpid(pid, &state, 0);
    NSLog(@"stat is %d\n", state);
    return 0;
}

我上面代码都给了

spawn("/usr/bin/killall", "/usr/bin/killall", "-9", "WeChat", NULL);

不就行了吗


#35

主要还是C用的太少了,我会努力的


#36

尴尬了 spawn() 不再 <spawn.h> 中


#37

有没有找到直接关闭的方法


#38

用楼上的方法可以直接关闭