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?
Forum Updated to NodeBB v4.3 + New Features

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

Scheduled Pinned Locked Moved Solved General and Desktop
22 Posts 6 Posters 3.5k 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 Online
      JonBJ Online
      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 Online
              JonBJ Online
              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 Online
                  JonBJ Online
                  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.

                      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