in reply to how do i run a shell command without waiting for the output

is this rigth ?

Yes - if, as your code shows, you are using exec. You can use system as well inside the forked process, which allows you to check the return code; you have to exit after that. But you can also do without the fork, since system does an implicit fork, and spawn the process via /bin/sh in the background:

system qq(curl -H "Content-Type: application/json" -X POST -d '$datacu +rl' http://192.168.125.169/index.php/itsqd/v1/nmessage &); # <--- not +ice the ampersand

This lets you check - again, via the return code, which should be 0 on success - whether the shell succeeded spawning curl. If so, the shell returns immediately, and the curl process runs in the background. Otherwise the shell exits with a non-zero value, which is returned by system.

perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'

Replies are listed 'Best First'.
Re^2: how do i run a shell command without waiting for the output
by afoken (Chancellor) on Apr 25, 2017 at 18:09 UTC

    Unfortunately, "the" shell is everything but a single, consistent definition. Perl invokes the default shell, which can and does vary wildly from platform to platform and from system version to system version.

    More details:

    Of course, simply appending a space and an ampersand to a shell command to make the shell start a "background" process is not portable. Even on shells that support backgrounding, it might not work due to pipes or the like used in the command.

    And finally, shelling out to start curl just wastes time and resources. Perl can do HTTP requests just fine thanks to LWP::UserAgent, Net::HTTP::Client, and various other modules. Plus, there are at least three modules that use libcurl as backend: Net::Curl, WWW::Curl, and LWP::Curl.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)

      Thanks for your post which contains the missing bits for the OP to be fully answered. ++afoken

      perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'