java执行logcat重定向后,怎么停止logcat运行?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java执行logcat重定向后,怎么停止logcat运行?相关的知识,希望对你有一定的参考价值。

代码如下: String tmpCmd = "adb logcat -v threadtime '*:V' > E:\\qq.log"; try Process proc = Runtime.getRuntime().exec(new String[] "cmd.exe", "/c", tmpCmd ); proc.destroy(); catch (IOException e) e.printStackTrace(); 在执行proc.destroy()后,adb logcat命令还在执行。有什么方法可以让命令停止?

好像没什么办法,以下是Process类关于进程杀死的描述The subprocess is not killed when there are no more references to the Process object, but rather the subprocess continues executing asynchronously。也就是说,Process.destroy可能可以杀死子进程,也可能杀不死子进程。其中的相关性,要看destory的实现才知道。通过伪终端的方法,可以发送Ctrl+c进而发送SIGINT中断来杀死进程。 参考技术A 那复杂一点,再用Runtime运行TaskLisk 找到adb的PID,然后再用TaskKill 来终止之

注销后如何停止 Symfony 重定向

【中文标题】注销后如何停止 Symfony 重定向【英文标题】:How to stop Symfony redirecting after logout 【发布时间】:2022-01-20 18:53:21 【问题描述】:

默认的 Symfony 行为是在注销后重定向到 '/'。 我不需要 Symfony 的任何重定向,因为它是一个 api 应用程序。

就像在登录期间 Symfony 控制进行身份验证,但仍然运行登录控制器以执行进一步的操作。在这种情况下,这也是注销的理想选择。

security.yaml

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            lazy: true
            provider: app_user_provider

            json_login:
                check_path: app_login
                username_path: email
                password_path: password

            logout:
                path: app_logout

来自 Symfony 文档的 src/Controller/SecurityController.php

    /**
     * @Route("/logout", name="app_logout", methods="GET")
     */
    public function logout(): void
    
        // controller can be blank: it will never be called!
        throw new \Exception('Don\'t forget to activate logout in security.yaml');
    

【问题讨论】:

【参考方案1】:

您可以编写自定义注销处理程序。实际上,在 symfony 5.1 中引入了一种新的方法。基本上,现在您可以在全局范围内或为某些特定防火墙注册事件侦听器,并在此人注销后执行任何操作。

回到您的问题(来自下面的博文):

Symfony\Component\Security\Http\Event\LogoutEvent 对象 侦听器接收到的包含有用的方法,例如 getToken() (获取会话的安全令牌),getRequest() 和 setResponse().

后面会帮助你。这意味着您可以通过为事件设置新的响应对象来返回您想要的任何东西,而不是默认的RedirectResponse

services.yaml:

services:
    App\EventListener\CustomLogoutListener:
        tags:
            - name: 'kernel.event_listener'
              event: 'Symfony\Component\Security\Http\Event\LogoutEvent'
              dispatcher: security.event_dispatcher.main
              method: onLogout

还有你的听众:

namespace App\EventListener;

use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Security\Http\Event\LogoutEvent;

class CustomLogoutListener

    public function onLogout(LogoutEvent $logoutEvent): void
    
        $logoutEvent->setResponse(new JsonResponse([]));
    

阅读更多:Simpler logout customization

【讨论】:

感谢您提供完整的答案,看起来它可以工作,我会在接下来的几天里使用它。我猜这将是答案。我真的希望有一个像target: null 这样的内置解决方案来取消重定向。 @Bradmage 这几乎是不可能的,因为您至少需要某种回应。所以这种target: null 的行为将是不确定的。 我认为有误会,我对target: null 的意图是强制它使用app_logout 方法来处理响应。您的解决方案完全符合我的要求,只是完成相同工作的漫长道路。 App\EventListener\CutomLogoutListener:有错字,但我无法编辑一个字符。 @Bradmage 已修复

以上是关于java执行logcat重定向后,怎么停止logcat运行?的主要内容,如果未能解决你的问题,请参考以下文章

将 adb logcat 重定向到 android avd

将 system.out 重定向到 logcat [重复]

重定向后停止连接

视频停止后如何重定向到主页

在Django中提交表单后停止页面重定向

Windows:如何使用CreateProcess停止重定向Stdout的缓冲