Esta página descreve muito bem
If command is a null pointer, the system() function shall determine whether the host environment has a command processor. If command is not a null pointer, the system() function shall pass the string pointed to by command to that command processor to be executed in an implementation-defined manner; this might then cause the program calling system() to behave in a non-conforming manner or to terminate.
Então, sim, ele invoca um intérprete bash, desde que este seja o processador de comando determinado pela implementação da biblioteca padrão C nesse sistema. Um processo filho é criado e destruído quando o comando é executado.
EDIT: Isto é específico para C, outras linguagens podem funcionar de forma diferente, mas geralmente é assim