Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. How to close the subroutine of the program started by qprocess?

How to close the subroutine of the program started by qprocess?

Scheduled Pinned Locked Moved Solved General and Desktop
22 Posts 6 Posters 6.6k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Offline
    J Offline
    jiaming
    wrote on last edited by
    #12

    I forgot to say that if A is opened in a terminal, B will also be closed when using Ctrl+C to close. What I am looking for is a method similar to sending a Ctrl+C signal.

    JonBJ JoeCFDJ 2 Replies Last reply
    0
    • J jiaming

      I forgot to say that if A is opened in a terminal, B will also be closed when using Ctrl+C to close. What I am looking for is a method similar to sending a Ctrl+C signal.

      JonBJ Offline
      JonBJ Offline
      JonB
      wrote on last edited by JonB
      #13

      @jiaming
      Use Linux man 2 kill call: kill(pid_of_A, SIGINT). But I doubt it will work from here.

      It's nice to see that you ignore every suggestion we make.... Best of luck.

      1 Reply Last reply
      0
      • J Offline
        J Offline
        jiaming
        wrote on last edited by
        #14

        The main reason is that I didn't write A and B programs. They have formed a good system. It's troublesome for me to change them. It's better to have a simpler method.

        I found that PPID of B is 1......

        I'm sorry for the trouble.

        jsulmJ JonBJ 3 Replies Last reply
        0
        • J jiaming

          The main reason is that I didn't write A and B programs. They have formed a good system. It's troublesome for me to change them. It's better to have a simpler method.

          I found that PPID of B is 1......

          I'm sorry for the trouble.

          jsulmJ Offline
          jsulmJ Offline
          jsulm
          Lifetime Qt Champion
          wrote on last edited by
          #15

          @jiaming said in How to close the subroutine of the program started by qprocess?:

          I found that PPID of B is 1

          You need PID if you want to kill it...

          https://forum.qt.io/topic/113070/qt-code-of-conduct

          1 Reply Last reply
          0
          • J jiaming

            The main reason is that I didn't write A and B programs. They have formed a good system. It's troublesome for me to change them. It's better to have a simpler method.

            I found that PPID of B is 1......

            I'm sorry for the trouble.

            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #16

            @jiaming You could try to get PID from B using PID from A, see https://stackoverflow.com/questions/17743879/how-to-get-child-process-from-parent-process

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            0
            • J jiaming

              The main reason is that I didn't write A and B programs. They have formed a good system. It's troublesome for me to change them. It's better to have a simpler method.

              I found that PPID of B is 1......

              I'm sorry for the trouble.

              JonBJ Offline
              JonBJ Offline
              JonB
              wrote on last edited by JonB
              #17

              @jiaming said in How to close the subroutine of the program started by qprocess?:

              I found that PPID of B is 1......

              Which is why I said I do not think that sending a SIGINT to the parent (A) will have any effect on B...!

              A process ID value of 1 indicates that there is no parent process associated with the [...] process."

              1 Reply Last reply
              1
              • J jiaming

                I forgot to say that if A is opened in a terminal, B will also be closed when using Ctrl+C to close. What I am looking for is a method similar to sending a Ctrl+C signal.

                JoeCFDJ Offline
                JoeCFDJ Offline
                JoeCFD
                wrote on last edited by JoeCFD
                #18

                @jiaming kill( m_process->pid(), SIGINT ); <==this does what you need. You need somehow to find the pid of B.
                std::string pid_str = exec( "pidof B" ); exec is defined in the post above and "pidof" is a linux command to find process id.
                if( !pid_str.empty() ) {
                int pid = std::stoi( pid_str );
                kill( pid, SIGINT );
                }

                JonBJ 1 Reply Last reply
                0
                • JoeCFDJ JoeCFD

                  @jiaming kill( m_process->pid(), SIGINT ); <==this does what you need. You need somehow to find the pid of B.
                  std::string pid_str = exec( "pidof B" ); exec is defined in the post above and "pidof" is a linux command to find process id.
                  if( !pid_str.empty() ) {
                  int pid = std::stoi( pid_str );
                  kill( pid, SIGINT );
                  }

                  JonBJ Offline
                  JonBJ Offline
                  JonB
                  wrote on last edited by
                  #19

                  @JoeCFD said in How to close the subroutine of the program started by qprocess?:

                  You need somehow to find the pid of B.

                  But he doesn't know the PID of B.

                  1 Reply Last reply
                  0
                  • JoeCFDJ Offline
                    JoeCFDJ Offline
                    JoeCFD
                    wrote on last edited by
                    #20

                    Be aware that Control + C ( kill( pid, SIGINT ); ) may not kill your process all the time.
                    exec( "kill -9 pid" ) will be very clean.

                    1 Reply Last reply
                    0
                    • Kent-DorfmanK Offline
                      Kent-DorfmanK Offline
                      Kent-Dorfman
                      wrote on last edited by
                      #21

                      Nothing original to add, but I recommend all participants in this thread read http://morningcoffee.io/killing-a-process-and-all-of-its-descendants.html as he does a fair job explaining the relationships in POSIX environments.

                      If you meet the AI on the road, kill it.

                      JoeCFDJ 1 Reply Last reply
                      3
                      • Kent-DorfmanK Kent-Dorfman

                        Nothing original to add, but I recommend all participants in this thread read http://morningcoffee.io/killing-a-process-and-all-of-its-descendants.html as he does a fair job explaining the relationships in POSIX environments.

                        JoeCFDJ Offline
                        JoeCFDJ Offline
                        JoeCFD
                        wrote on last edited by
                        #22

                        @Kent-Dorfman thanks for sharing.

                        1 Reply Last reply
                        0

                        • Login

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved