POSIX-ly finding a specific Java process












1












$begingroup$


In this code I find a list all of the running java processes and give the below function a name to look for, it will do its best. But since I find my approach a little too ugly, could some POSIX shell script writer have a look and possibly give me some simplification recommendations?





#!/bin/sh

# here is an ugly constant vuze java process name
readonly vuze_java_process_name='org.gudy.azureus2.ui.swt.Main'

is_java_program_running()
# expected arguments:
# $1 = java program name
{
# there will always be at least one java process:
# jdk.jcmd/sun.tools.jps.Jps, which is actually
# the program giving us the list of java processes
java_process_list=$( jps -l | awk '{print $2}' )

# this behaves strangely if there is zero processes (needs verification)
# but since there is always at least one, no problem here
java_process_list_count=$(( $( printf '%sn' "${java_process_list}" | wc -l ) ))

# set the result value as if we did not find it
result=false

# POSIX-ly simulate FOR loop
i=1; while [ "${i}" -le "${java_process_list_count}" ]
do
# here we take one line from the list on $i position
java_process_entry=$( echo "${java_process_list}" | sed --posix --quiet "${i}{p;q}" )
# compare the given process entry with given java program name
if [ "${java_process_entry}" = "${1}" ]
then
# set the result value
result=true
# end this loop
break
fi
# increase iterator
i=$(( i + 1 ))
done

# depending on if we found vuze process running,
# return positive or negative result value
if [ "${result}" = true ]
then
return 0
else
return 1
fi
}

###
### EXAMPLE on Vuze
###

# keep Vuze alive forever, check in 5 seconds interval
while true
do
sleep 5s

if ! is_java_program_running "${vuze_java_process_name}"
then
my_date_time=$(date +%Y-%m-%d_%H:%M:%S)
printf '%s %sn' "${my_date_time}" "(re-)starting Vuze"
( /home/vlastimil/Downloads/vuze/vuze > /dev/null 2>&1 & )
fi
done









share|improve this question











$endgroup$

















    1












    $begingroup$


    In this code I find a list all of the running java processes and give the below function a name to look for, it will do its best. But since I find my approach a little too ugly, could some POSIX shell script writer have a look and possibly give me some simplification recommendations?





    #!/bin/sh

    # here is an ugly constant vuze java process name
    readonly vuze_java_process_name='org.gudy.azureus2.ui.swt.Main'

    is_java_program_running()
    # expected arguments:
    # $1 = java program name
    {
    # there will always be at least one java process:
    # jdk.jcmd/sun.tools.jps.Jps, which is actually
    # the program giving us the list of java processes
    java_process_list=$( jps -l | awk '{print $2}' )

    # this behaves strangely if there is zero processes (needs verification)
    # but since there is always at least one, no problem here
    java_process_list_count=$(( $( printf '%sn' "${java_process_list}" | wc -l ) ))

    # set the result value as if we did not find it
    result=false

    # POSIX-ly simulate FOR loop
    i=1; while [ "${i}" -le "${java_process_list_count}" ]
    do
    # here we take one line from the list on $i position
    java_process_entry=$( echo "${java_process_list}" | sed --posix --quiet "${i}{p;q}" )
    # compare the given process entry with given java program name
    if [ "${java_process_entry}" = "${1}" ]
    then
    # set the result value
    result=true
    # end this loop
    break
    fi
    # increase iterator
    i=$(( i + 1 ))
    done

    # depending on if we found vuze process running,
    # return positive or negative result value
    if [ "${result}" = true ]
    then
    return 0
    else
    return 1
    fi
    }

    ###
    ### EXAMPLE on Vuze
    ###

    # keep Vuze alive forever, check in 5 seconds interval
    while true
    do
    sleep 5s

    if ! is_java_program_running "${vuze_java_process_name}"
    then
    my_date_time=$(date +%Y-%m-%d_%H:%M:%S)
    printf '%s %sn' "${my_date_time}" "(re-)starting Vuze"
    ( /home/vlastimil/Downloads/vuze/vuze > /dev/null 2>&1 & )
    fi
    done









    share|improve this question











    $endgroup$















      1












      1








      1





      $begingroup$


      In this code I find a list all of the running java processes and give the below function a name to look for, it will do its best. But since I find my approach a little too ugly, could some POSIX shell script writer have a look and possibly give me some simplification recommendations?





      #!/bin/sh

      # here is an ugly constant vuze java process name
      readonly vuze_java_process_name='org.gudy.azureus2.ui.swt.Main'

      is_java_program_running()
      # expected arguments:
      # $1 = java program name
      {
      # there will always be at least one java process:
      # jdk.jcmd/sun.tools.jps.Jps, which is actually
      # the program giving us the list of java processes
      java_process_list=$( jps -l | awk '{print $2}' )

      # this behaves strangely if there is zero processes (needs verification)
      # but since there is always at least one, no problem here
      java_process_list_count=$(( $( printf '%sn' "${java_process_list}" | wc -l ) ))

      # set the result value as if we did not find it
      result=false

      # POSIX-ly simulate FOR loop
      i=1; while [ "${i}" -le "${java_process_list_count}" ]
      do
      # here we take one line from the list on $i position
      java_process_entry=$( echo "${java_process_list}" | sed --posix --quiet "${i}{p;q}" )
      # compare the given process entry with given java program name
      if [ "${java_process_entry}" = "${1}" ]
      then
      # set the result value
      result=true
      # end this loop
      break
      fi
      # increase iterator
      i=$(( i + 1 ))
      done

      # depending on if we found vuze process running,
      # return positive or negative result value
      if [ "${result}" = true ]
      then
      return 0
      else
      return 1
      fi
      }

      ###
      ### EXAMPLE on Vuze
      ###

      # keep Vuze alive forever, check in 5 seconds interval
      while true
      do
      sleep 5s

      if ! is_java_program_running "${vuze_java_process_name}"
      then
      my_date_time=$(date +%Y-%m-%d_%H:%M:%S)
      printf '%s %sn' "${my_date_time}" "(re-)starting Vuze"
      ( /home/vlastimil/Downloads/vuze/vuze > /dev/null 2>&1 & )
      fi
      done









      share|improve this question











      $endgroup$




      In this code I find a list all of the running java processes and give the below function a name to look for, it will do its best. But since I find my approach a little too ugly, could some POSIX shell script writer have a look and possibly give me some simplification recommendations?





      #!/bin/sh

      # here is an ugly constant vuze java process name
      readonly vuze_java_process_name='org.gudy.azureus2.ui.swt.Main'

      is_java_program_running()
      # expected arguments:
      # $1 = java program name
      {
      # there will always be at least one java process:
      # jdk.jcmd/sun.tools.jps.Jps, which is actually
      # the program giving us the list of java processes
      java_process_list=$( jps -l | awk '{print $2}' )

      # this behaves strangely if there is zero processes (needs verification)
      # but since there is always at least one, no problem here
      java_process_list_count=$(( $( printf '%sn' "${java_process_list}" | wc -l ) ))

      # set the result value as if we did not find it
      result=false

      # POSIX-ly simulate FOR loop
      i=1; while [ "${i}" -le "${java_process_list_count}" ]
      do
      # here we take one line from the list on $i position
      java_process_entry=$( echo "${java_process_list}" | sed --posix --quiet "${i}{p;q}" )
      # compare the given process entry with given java program name
      if [ "${java_process_entry}" = "${1}" ]
      then
      # set the result value
      result=true
      # end this loop
      break
      fi
      # increase iterator
      i=$(( i + 1 ))
      done

      # depending on if we found vuze process running,
      # return positive or negative result value
      if [ "${result}" = true ]
      then
      return 0
      else
      return 1
      fi
      }

      ###
      ### EXAMPLE on Vuze
      ###

      # keep Vuze alive forever, check in 5 seconds interval
      while true
      do
      sleep 5s

      if ! is_java_program_running "${vuze_java_process_name}"
      then
      my_date_time=$(date +%Y-%m-%d_%H:%M:%S)
      printf '%s %sn' "${my_date_time}" "(re-)starting Vuze"
      ( /home/vlastimil/Downloads/vuze/vuze > /dev/null 2>&1 & )
      fi
      done






      java linux sh posix






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 6 mins ago









      200_success

      129k15153415




      129k15153415










      asked 7 hours ago









      VlastimilVlastimil

      607318




      607318






















          0






          active

          oldest

          votes











          Your Answer





          StackExchange.ifUsing("editor", function () {
          return StackExchange.using("mathjaxEditing", function () {
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
          });
          });
          }, "mathjax-editing");

          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "196"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f213156%2fposix-ly-finding-a-specific-java-process%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Code Review Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f213156%2fposix-ly-finding-a-specific-java-process%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          How to make a Squid Proxy server?

          Is this a new Fibonacci Identity?

          19世紀