A call-activity allows you to set a key of a process-definition which you want to see started. If the parent-process reaches the call-activity, it will fetch the LATEST process-definition with that key and start a new process-instance of that definition. When that child process is completed, the outgoing sequence flow from the call-activity is taken.
This is a good way to start the second process from within the first process. Offcourse, if you need actual "communication" between the parent and child, consider using message-events or using the API from inside the processes, using service-task, tasklisteners, execution-listeners. You can get hold of the EngineServices based on the DelegateTask/DelegateExecution you get passed on in those classes, allwoing you to do stuff like "engineServices.getRuntimeService().signal(childProcessInstanceId)".