Great! I'm glad you got it sorted out.

On Fri, Jan 22, 2016 at 6:24 PM, Adrian Salceanu <[email protected]>
wrote:

> No no, It's perfectly fine, it was my fault. What I haven't realized is
> that if I start the server async then my script will finish immediately,
> which also terminated the server. It was my responsibility to keep the
> whole app alive now.
>
> It works like a charm!
>
>
> sâmbătă, 23 ianuarie 2016, 00:06:13 UTC+1, Stefan Karpinski a scris:
>>
>> The shell works with processes, Julia has tasks where are not the same
>> thing...
>>
>> On Fri, Jan 22, 2016 at 5:49 PM, Adrian Salceanu <[email protected]>
>> wrote:
>>
>>> The problem seems to that HttpServer can not run @async - it exits
>>> immediately.
>>>
>>> ===
>>>
>>> using HttpServer
>>>
>>> http = HttpHandler() do req::Request, res::Response
>>>     Response( ismatch(r"^/hello/", req.resource) ? exit(2) : 404 )
>>> end
>>>
>>> server = Server( http )
>>> run( server, 8001 )  # <--- this works but blocks
>>> @async run( server, 8001 ) # <--- this exits immediately
>>>
>>> ===
>>>
>>> It's not necessarily a problem that HttpServer blocks. But what drives
>>> me nuts is: if I run
>>> $ julia app.jl &
>>> in the shell, it works perfectly. The process is placed in the
>>> background, the server happily listens to the assigned port, etc.
>>>
>>> Why can't I run the same command from within another julia process and
>>> get the same effect?
>>>
>>>
>>> vineri, 22 ianuarie 2016, 22:40:56 UTC+1, Stefan Karpinski a scris:
>>>>
>>>> @spawn runs a command on a (random) worker process. If you want to do
>>>> "background" work in the current process, you can use @async:
>>>>
>>>> julia> t = @async (sleep(5); rand())
>>>> Task (runnable) @0x0000000112d746a0
>>>>
>>>> julia> wait(t)
>>>> 0.14543742643271207
>>>>
>>>>
>>>> On Fri, Jan 22, 2016 at 4:33 PM, Adrian Salceanu <[email protected]>
>>>> wrote:
>>>>
>>>>> Oh! The ruby analogy made me think about actually spawning the
>>>>> detached command! Which produced the desired effect!
>>>>>
>>>>> julia> @spawn run(detach(`ping www.google.com`))
>>>>>
>>>>>
>>>>>
>>>>> vineri, 22 ianuarie 2016, 22:29:27 UTC+1, Adrian Salceanu a scris:
>>>>>>
>>>>>> I guess what I'm looking for is the equivalent of Ruby's Process#spawn
>>>>>>
>>>>>> In REPL:
>>>>>>
>>>>>> >> pid = Process.spawn("ping www.google.com", :out => '/dev/null')
>>>>>> 83210
>>>>>> >>                         <-- the process is running in the
>>>>>> background and control has been returned to the REPL
>>>>>>
>>>>>>
>>>>>> vineri, 22 ianuarie 2016, 22:06:01 UTC+1, Adrian Salceanu a scris:
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I'm hammering at a web app and I'm trying to setup functionality to
>>>>>>> monitor the file system for changes and restart/reload the server
>>>>>>> automatically so the changes are picked up (I'm using Mux which uses
>>>>>>> HttpServer).
>>>>>>>
>>>>>>> The approach I have in mind is:
>>>>>>>
>>>>>>> 1. have a startup script which is run from the command line,
>>>>>>> something like:
>>>>>>> $ julia -L startup.jl
>>>>>>>
>>>>>>> 2. the startup script launches the web app, which starts the web
>>>>>>> server. My intention was to run
>>>>>>> $ julia -L app.jl
>>>>>>> as a command inside startup.jl, detached, and have the startup.jl
>>>>>>> script get back control, with app.jl running detached in the background.
>>>>>>>
>>>>>>> 3. once startup.jl gets back control, it begins monitoring the file
>>>>>>> system and when changes are detected, kills the app and relaunches it.
>>>>>>>
>>>>>>> That was the theory. Now, I might be missing something but I can't
>>>>>>> find a way to detach the command I'm running and get control back to the
>>>>>>> startup script. And I tried a lot of things!
>>>>>>>
>>>>>>> ===
>>>>>>>
>>>>>>> I'm providing simpler example using "ping", which also run
>>>>>>> indefinitely, similar to the web server.
>>>>>>>
>>>>>>> julia> run(detach(`ping "www.google.com"`)) # the command is
>>>>>>> detached and continues to run after the julia REPL is closed, but at 
>>>>>>> this
>>>>>>> point the REPL does not get control, there's no cursor available in the 
>>>>>>> REPL
>>>>>>> PING www.google.com (173.194.45.82): 56 data bytes
>>>>>>> 64 bytes from 173.194.45.82: icmp_seq=0 ttl=54 time=30.138 ms
>>>>>>> 64 bytes from 173.194.45.82: icmp_seq=1 ttl=54 time=30.417 ms
>>>>>>> ... more output ...
>>>>>>> 64 bytes from 173.194.45.82: icmp_seq=7 ttl=54 time=30.486 ms
>>>>>>> 64 bytes from 173.194.45.82: icmp_seq=8 ttl=54 time=30.173 ms
>>>>>>> ^CERROR: InterruptException:
>>>>>>>                         <---- here I press Ctrl+C and only now the REPL
>>>>>>> gets back the cursor, with the command still running in the background
>>>>>>>
>>>>>>> ===
>>>>>>>
>>>>>>> Also, related to this, passing "&" into the command to detach does
>>>>>>> not work as expected, the "&" is interpreted as argument of the command.
>>>>>>> Not sure if this would help anyway to return control to the startup.jl
>>>>>>> script?
>>>>>>>
>>>>>>> julia> run(detach(`ping "www.google.com" &`));
>>>>>>> usage: ping [-AaDdfnoQqRrv] [-b boundif] [-c count] [-G sweepmaxsize]
>>>>>>>             [-g sweepminsize] [-h sweepincrsize] [-i wait] [−k
>>>>>>> trafficclass]
>>>>>>>             [-l preload] [-M mask | time] [-m ttl] [-p pattern]
>>>>>>>             [-S src_addr] [-s packetsize] [-t timeout][-W waittime]
>>>>>>> [-z tos]
>>>>>>>             host
>>>>>>>        ping [-AaDdfLnoQqRrv] [-b boundif] [-c count] [-I iface] [-i
>>>>>>> wait]
>>>>>>>             [−k trafficclass] [-l preload] [-M mask | time] [-m ttl]
>>>>>>> [-p pattern] [-S src_addr]
>>>>>>>             [-s packetsize] [-T ttl] [-t timeout] [-W waittime]
>>>>>>>             [-z tos] mcast-group
>>>>>>> ERROR: failed process: Process(`ping www.google.com &`,
>>>>>>> ProcessExited(64)) [64]
>>>>>>>  in run at /usr/local/Cellar/julia/0.4.2/lib/julia/sys.dylib
>>>>>>>
>>>>>>> ===
>>>>>>>
>>>>>>> Thanks
>>>>>>>
>>>>>>
>>>>
>>

Reply via email to