Of course I do expect a stream that has no end to run forever. Stream.run/1 is documented to evaluate the complete stream.
As well as I do expect while true {} to do nothing forever, and not to do a single nothing only when I do ask for it…
After reformatting your code, I do see a little bit better what you meant. Still I’d expect that Stream to run forever and to block that process it is run in, but of course you can ask for printing “hi” and doing an otherwise useless addition if you do know the PID of the starting process.


















